fixed #27 pointController:setPoint()에 트리거 추가.

This commit is contained in:
bnu 2013-11-19 22:30:41 +09:00
parent a4f550fa5c
commit 57687c15bc

View file

@ -480,18 +480,21 @@ class pointController extends point
$member_srl = abs($member_srl);
$mode_arr = array('add', 'minus', 'update', 'signup');
if(!$mode || !in_array($mode,$mode_arr)) $mode = 'update';
// Get configuration information
$oMemberModel = &getModel('member');
$oModuleModel = &getModel('module');
$oPointModel = &getModel('point');
$config = $oModuleModel->getModuleConfig('point');
// Get the default configuration information
$prev_point = $oPointModel->getPoint($member_srl, true);
$prev_level = $oPointModel->getLevel($prev_point, $config->level_step);
$current_point = $oPointModel->getPoint($member_srl, true);
$current_level = $oPointModel->getLevel($current_point, $config->level_step);
// Change points
$args =new stdClass();
$args = new stdClass();
$args->member_srl = $member_srl;
$args->point = $prev_point;
$args->point = $current_point;
switch($mode)
{
@ -502,22 +505,40 @@ class pointController extends point
$args->point -= $point;
break;
case 'update' :
$args->point = $point;
break;
case 'signup' :
$args->point = $point;
break;
}
if($args->point < 0) $args->point = 0;
$point = $args->point;
// Call a trigger (before)
$trigger_obj = new stdClass();
$trigger_obj->member_srl = $args->member_srl;
$trigger_obj->mode = $mode;
$trigger_obj->current_point = $current_point;
$trigger_obj->current_level = $current_level;
$trigger_obj->set_point = $point;
$trigger_output = ModuleHandler::triggerCall('point.setPoint', 'before', $trigger_obj);
if(!$trigger_output->toBool())
{
return $trigger_output;
}
// begin transaction
$oDB = &DB::getInstance();
$oDB->begin();
// If there are points, update, if no, insert
$oPointModel = &getModel('point');
if($oPointModel->isExistsPoint($member_srl)) executeQuery("point.updatePoint", $args);
else executeQuery("point.insertPoint", $args);
// Get a new level
$level = $oPointModel->getLevel($point, $config->level_step);
// If existing level and a new one are different attempt to set a point group
if($level != $prev_level)
if($level != $current_level)
{
// Check if the level, for which the current points are prepared, is calculate and set the correct group
$point_group = $config->point_group;
@ -528,7 +549,7 @@ class pointController extends point
$default_group = $oMemberModel->getDefaultGroup();
// Get the removed group and the newly granted group
$del_group_list = array();
$new_group_srls = array();
$new_group_list = array();
asort($point_group);
// Reset group after initialization
@ -541,7 +562,7 @@ class pointController extends point
foreach($point_group as $group_srl => $target_level)
{
$del_group_list[] = $group_srl;
if($target_level == $level) $new_group_srls[] = $group_srl;
if($target_level == $level) $new_group_list[] = $group_srl;
}
}
// Otherwise, in case the level is reduced, add the recent group
@ -556,7 +577,7 @@ class pointController extends point
{
if($target_level == $i)
{
$new_group_srls[] = $group_srl;
$new_group_list[] = $group_srl;
}
}
$i = 0;
@ -578,11 +599,11 @@ class pointController extends point
foreach($point_group as $group_srl => $target_level)
{
$del_group_list[] = $group_srl;
if($target_level <= $level) $new_group_srls[] = $group_srl;
if($target_level <= $level) $new_group_list[] = $group_srl;
}
}
// If there is no a new group, granted the default group
if(!$new_group_srls[0]) $new_group_srls[0] = $default_group->group_srl;
if(!$new_group_list[0]) $new_group_list[0] = $default_group->group_srl;
// Remove linkage group
if($del_group_list && count($del_group_list))
{
@ -591,7 +612,7 @@ class pointController extends point
$del_group_output = executeQuery('point.deleteMemberGroup', $del_group_args);
}
// Grant a new group
foreach($new_group_srls as $group_srl)
foreach($new_group_list as $group_srl)
{
$new_group_args->member_srl = $member_srl;
$new_group_args->group_srl = $group_srl;
@ -599,6 +620,20 @@ class pointController extends point
}
}
}
// Call a trigger (after)
$trigger_obj->new_group_list = $new_group_list;
$trigger_obj->del_group_list = $del_group_list;
$trigger_obj->new_level = $level;
$trigger_output = ModuleHandler::triggerCall('point.setPoint', 'after', $trigger_obj);
if(!$trigger_output->toBool())
{
$oDB->rollback();
return $trigger_output;
}
$oDB->commit();
// Cache Settings
$cache_path = sprintf('./files/member_extra_info/point/%s/', getNumberingPath($member_srl));
FileHandler::makedir($cache_path);