Fix #1341 calculate point difference accurately when files are deleted and re-attached

This commit is contained in:
Kijin Sung 2020-12-15 23:31:00 +09:00
parent aa7a548ecf
commit 367635d21b
4 changed files with 59 additions and 35 deletions

View file

@ -657,6 +657,7 @@ class documentController extends document
return $attachOutput;
}
$obj->updated_file_count = $attachOutput->get('updated_file_count');
ModuleHandler::triggerCall('document.insertDocument', 'after', $obj);
// commit
@ -967,6 +968,7 @@ class documentController extends document
return $attachOutput;
}
$obj->updated_file_count = $attachOutput->get('updated_file_count');
ModuleHandler::triggerCall('document.updateDocument', 'after', $obj);
// commit

View file

@ -727,7 +727,9 @@ class fileController extends file
{
$args->upload_target_type = substr($upload_target_type, 0, 3);
}
return executeQuery('file.updateFileValid', $args);
$output = executeQuery('file.updateFileValid', $args);
$output->add('updated_file_count', intval(DB::getInstance()->getAffectedRows()));
return $output;
}
/**

View file

@ -30,7 +30,8 @@ class point extends ModuleObject
array('member.doLogin', 'after', 'controller', 'triggerAfterLogin'),
array('member.deleteGroup', 'after', 'controller', 'triggerDeleteGroup'),
array('document.insertDocument', 'after', 'controller', 'triggerInsertDocument'),
array('document.updateDocument', 'before', 'controller', 'triggerUpdateDocument'),
array('document.updateDocument', 'before', 'controller', 'triggerBeforeUpdateDocument'),
array('document.updateDocument', 'after', 'controller', 'triggerAfterUpdateDocument'),
array('document.deleteDocument', 'after', 'controller', 'triggerDeleteDocument'),
array('document.moveDocumentToTrash', 'after', 'controller', 'triggerTrashDocument'),
array('comment.insertComment', 'after', 'controller', 'triggerInsertComment'),
@ -53,6 +54,7 @@ class point extends ModuleObject
* Triggers to delete.
*/
protected static $_delete_triggers = array(
array('document.updateDocument', 'before', 'controller', 'triggerUpdateDocument'),
array('document.deleteDocument', 'before', 'controller', 'triggerBeforeDeleteDocument'),
array('file.insertFile', 'after', 'controller', 'triggerInsertFile'),
);

View file

@ -7,6 +7,11 @@
*/
class pointController extends point
{
/**
* Variables for internal reference.
*/
protected $_original;
/**
* @brief Initialization
*/
@ -102,68 +107,81 @@ class pointController extends point
return;
}
// Get the points of the member
$cur_point = PointModel::getPoint($member_srl);
$diff = 0;
// Add points for the document.
$document_point = $this->_getModulePointConfig($module_srl, 'insert_document');
$cur_point += $document_point;
$diff += $this->_getModulePointConfig($module_srl, 'insert_document');
// Add points for attached files.
if ($obj->uploaded_count > 0)
if ($obj->updated_file_count > 0)
{
$attached_files_point = $this->_getModulePointConfig($module_srl, 'upload_file');
$cur_point += $attached_files_point * $obj->uploaded_count;
$upload_point = $this->_getModulePointConfig($module_srl, 'upload_file');
$diff += $upload_point * $obj->updated_file_count;
}
// Increase the point.
$this->setPoint($member_srl, $cur_point);
$cur_point = PointModel::getPoint($member_srl);
$this->setPoint($member_srl, $cur_point + $diff);
}
/**
* Save information about the original document before updating.
*/
public function triggerBeforeUpdateDocument($obj)
{
if ($obj->document_srl)
{
$this->_original = DocumentModel::getDocument($obj->document_srl);
if (!$this->_original->isExists())
{
$this->_original = null;
}
}
}
/**
* @brief The trigger to give points for normal saving the temporarily saved document
* Temporary storage at the point in 1.2.3 changed to avoid payment
*/
public function triggerUpdateDocument($obj)
public function triggerAfterUpdateDocument($obj)
{
$oDocument = DocumentModel::getDocument($obj->document_srl);
if ($this->_original)
{
$module_srl = $this->_original->get('module_srl');
$member_srl = abs($this->_original->get('member_srl'));
}
else
{
$module_srl = $obj->module_srl;
$member_srl = $obj->member_srl;
}
$module_srl = $oDocument->get('module_srl');
$member_srl = abs($oDocument->get('member_srl'));
if (!$module_srl || !$member_srl)
{
return;
}
// Only give points if the document is being updated from TEMP to another status such as PUBLIC.
if ($obj->status === DocumentModel::getConfigStatus('temp') || $oDocument->get('status') !== DocumentModel::getConfigStatus('temp'))
$diff = 0;
// Add points for the document, only if the document is being updated from TEMP to another status such as PUBLIC.
if ($obj->status !== DocumentModel::getConfigStatus('temp') && $this->_original->get('status') === DocumentModel::getConfigStatus('temp'))
{
if ($obj->uploaded_count > $oDocument->get('uploaded_count'))
{
$cur_point = PointModel::getPoint($member_srl);
$attached_files_point = $this->_getModulePointConfig($module_srl, 'upload_file');
$cur_point += $attached_files_point * ($obj->uploaded_count - $oDocument->get('uploaded_count'));
$this->setPoint($member_srl, $cur_point);
}
return;
$diff += $this->_getModulePointConfig($module_srl, 'insert_document');
}
// Get the points of the member
$cur_point = PointModel::getPoint($member_srl);
// Add points for the document.
$document_point = $this->_getModulePointConfig($module_srl, 'insert_document');
$cur_point += $document_point;
// Add points for attached files.
if ($obj->uploaded_count > 0)
if ($obj->updated_file_count > 0)
{
$attached_files_point = $this->_getModulePointConfig($module_srl, 'upload_file');
$cur_point += $attached_files_point * $obj->uploaded_count;
$upload_point = $this->_getModulePointConfig($module_srl, 'upload_file');
$diff += $upload_point * $obj->updated_file_count;
}
// Increase the point.
$this->setPoint($member_srl, $cur_point);
$cur_point = PointModel::getPoint($member_srl);
$this->setPoint($member_srl, $cur_point + $diff);
// Remove the reference to the original document.
$this->_original = null;
}
/**