From 57687c15bcdb5decd299788e8ce58ce57d49f77a Mon Sep 17 00:00:00 2001 From: bnu Date: Tue, 19 Nov 2013 22:30:41 +0900 Subject: [PATCH] =?UTF-8?q?fixed=20#27=20pointController:setPoint()?= =?UTF-8?q?=EC=97=90=20=ED=8A=B8=EB=A6=AC=EA=B1=B0=20=EC=B6=94=EA=B0=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/point/point.controller.php | 61 +++++++++++++++++++++++------- 1 file changed, 48 insertions(+), 13 deletions(-) diff --git a/modules/point/point.controller.php b/modules/point/point.controller.php index 1d317a1a86..23001d4fec 100644 --- a/modules/point/point.controller.php +++ b/modules/point/point.controller.php @@ -480,18 +480,21 @@ function setPoint($member_srl, $point, $mode = null) $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 @@ function setPoint($member_srl, $point, $mode = null) $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 @@ function setPoint($member_srl, $point, $mode = null) $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 @@ function setPoint($member_srl, $point, $mode = null) 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 @@ function setPoint($member_srl, $point, $mode = null) { if($target_level == $i) { - $new_group_srls[] = $group_srl; + $new_group_list[] = $group_srl; } } $i = 0; @@ -578,11 +599,11 @@ function setPoint($member_srl, $point, $mode = null) 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 @@ function setPoint($member_srl, $point, $mode = null) $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 @@ function setPoint($member_srl, $point, $mode = null) } } } + + // 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);