Implement giving points to author and/or uploader when their document is read or their file is downloaded

This commit is contained in:
Kijin Sung 2018-01-31 23:35:59 +09:00
parent 08f6902798
commit 0b9a3fd56c

View file

@ -339,10 +339,10 @@ class pointController extends point
public function triggerBeforeDownloadFile($obj) public function triggerBeforeDownloadFile($obj)
{ {
$logged_info = Context::get('logged_info'); $logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl; $logged_member_srl = $logged_info->member_srl;
$author_member_srl = abs($obj->member_srl);
$module_srl = $obj->module_srl; $module_srl = $obj->module_srl;
if ($logged_member_srl && $logged_member_srl == $author_member_srl)
if ($member_srl && abs($obj->member_srl) == $member_srl)
{ {
return; return;
} }
@ -354,7 +354,7 @@ class pointController extends point
} }
// Get current points. // Get current points.
$cur_point = $member_srl ? getModel('point')->getPoint($member_srl, true) : 0; $cur_point = $logged_member_srl ? getModel('point')->getPoint($logged_member_srl) : 0;
// If the user (member or guest) does not have enough points, deny access. // If the user (member or guest) does not have enough points, deny access.
$config = $this->getConfig(); $config = $this->getConfig();
@ -372,22 +372,35 @@ class pointController extends point
public function triggerDownloadFile($obj) public function triggerDownloadFile($obj)
{ {
$logged_info = Context::get('logged_info'); $logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl; $logged_member_srl = $logged_info->member_srl;
$author_member_srl = abs($obj->member_srl);
$module_srl = $obj->module_srl; $module_srl = $obj->module_srl;
if ($logged_member_srl && $logged_member_srl == $author_member_srl)
if (!$member_srl || abs($obj->member_srl) == $member_srl)
{ {
return; return;
} }
$point = $this->_getModulePointConfig($module_srl, 'download_file'); // Adjust points of the downloader.
if (!$point) if ($logged_member_srl)
{ {
return; $point = $this->_getModulePointConfig($module_srl, 'download_file');
if ($point)
{
$cur_point = getModel('point')->getPoint($logged_member_srl);
$this->setPoint($logged_member_srl, $cur_point + $point);
}
} }
$cur_point = getModel('point')->getPoint($member_srl, true); // Adjust points of the uploader.
$this->setPoint($member_srl, $cur_point + $point); if ($author_member_srl)
{
$point = $this->_getModulePointConfig($module_srl, 'download_file_author');
if ($point)
{
$cur_point = getModel('point')->getPoint($author_member_srl);
$this->setPoint($author_member_srl, $cur_point + $point);
}
}
} }
/** /**
@ -397,25 +410,27 @@ class pointController extends point
public function triggerUpdateReadedCount($obj) public function triggerUpdateReadedCount($obj)
{ {
$logged_info = Context::get('logged_info'); $logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl; $logged_member_srl = $logged_info->member_srl;
$author_member_srl = abs($obj->get('member_srl'));
$module_srl = $obj->get('module_srl'); $module_srl = $obj->get('module_srl');
$target_member_srl = abs($obj->get('member_srl')); if ($logged_member_srl && $logged_member_srl == $author_member_srl)
if ($member_srl && $target_member_srl == $member_srl)
{ {
return; return;
} }
$point = $this->_getModulePointConfig($module_srl, 'read_document'); // Load configuration for reader and author points.
if (!$point) $reader_point = $this->_getModulePointConfig($module_srl, 'read_document');
$author_point = $this->_getModulePointConfig($module_srl, 'read_document_author');
if (!$reader_point && !$author_point)
{ {
return; return;
} }
// If the current member has already read this document, do not adjust points again. // If the reader has already read this document, do not adjust points again.
if ($member_srl) if ($logged_member_srl)
{ {
$args = new stdClass(); $args = new stdClass;
$args->member_srl = $member_srl; $args->member_srl = $logged_member_srl;
$args->document_srl = $obj->document_srl; $args->document_srl = $obj->document_srl;
$output = executeQuery('document.getDocumentReadedLogInfo', $args); $output = executeQuery('document.getDocumentReadedLogInfo', $args);
if ($output->data->count) if ($output->data->count)
@ -424,31 +439,41 @@ class pointController extends point
} }
} }
// Get current points. // Adjust points of the reader.
$cur_point = $member_srl ? getModel('point')->getPoint($member_srl, true) : 0; if ($reader_point)
// If the user (member or guest) does not have enough points, deny access.
$config = $this->getConfig();
if($config->disable_read_document == 'Y' && $cur_point + $point < 0)
{ {
$message = sprintf(lang('msg_disallow_by_point'), abs($point), $cur_point); // Get current points.
$obj->add('content', $message); $cur_point = $logged_member_srl ? getModel('point')->getPoint($logged_member_srl) : 0;
$_SESSION['banned_document'][$obj->document_srl] = true;
return new BaseObject(-1, $message); // If the reader does not have enough points, deny access.
} if ($cur_point + $reader_point < 0 && $this->getConfig()->disable_read_document == 'Y')
else {
{ $message = sprintf(lang('msg_disallow_by_point'), abs($reader_point), $cur_point);
$_SESSION['banned_document'][$obj->document_srl] = false; $obj->add('content', $message);
$_SESSION['banned_document'][$obj->document_srl] = true;
return new BaseObject(-1, $message);
}
else
{
$_SESSION['banned_document'][$obj->document_srl] = false;
}
// Record the fact that this member has already read this document.
if ($logged_member_srl)
{
$args = new stdClass();
$args->member_srl = $logged_member_srl;
$args->document_srl = $obj->document_srl;
$output = executeQuery('document.insertDocumentReadedLog', $args);
$this->setPoint($logged_member_srl, $cur_point + $reader_point);
}
} }
// Adjust points for member. // Adjust points of the person who wrote the document.
if ($member_srl) if ($author_point && $author_member_srl)
{ {
$args = new stdClass(); $cur_point = getModel('point')->getPoint($author_member_srl);
$args->member_srl = $member_srl; $this->setPoint($author_member_srl, $cur_point + $author_point);
$args->document_srl = $obj->document_srl;
$output = executeQuery('document.insertDocumentReadedLog', $args);
$this->setPoint($member_srl, $cur_point + $point);
} }
} }