'if_exist|numeric', 'user_id' => 'if_exist|trim|string', 'passwd' => 'if_exist|trim|string', // 'confirmpassword' => 'if_exist|trim|matches[passwd]', 'user_name' => 'if_exist|trim|string', 'user_state' => 'if_exist|trim|string', 'user_email' => 'if_exist|trim|valid_email', 'user_level' => 'if_exist|numeric', 'user_point' => 'if_exist|numeric', // 'proxied' => 'if_exist|in_list[on,off]', // 'fixed' => 'if_exist|in_list[on,off]', // 'locked' => 'if_exist|in_list[on,off]', // 'updated_at' => 'if_exist|valid_date', // 'created_at' => 'if_exist|valid_date', ]; public function getEntityByPK(int $uid): null|UserEntity { $this->where($this->primaryKey, $uid); return $this->getEntity(); } public function getEntityByID(string $id): null|UserEntity { $this->where('user_id', $id); return $this->getEntity(); } public function setPoint(UserEntity $entity, int $point, $sign = '+'): UserEntity { switch ($sign) { case '-': if ($entity->getPoint() < $point) { throw new \Exception("기존포인트:{$entity->getPoint()}가 감소 포인트:-{$point} 작습니다.\n"); } $point = $entity->getPoint() - $point; break; case '+': $point = $entity->getPoint() + $point; break; default: throw new \Exception(__FUNCTION__ . "에서는 {$sign}은 사용할수 없습니다.\n"); // break; } if ($entity->getPoint() != $point) { $old_point = $entity->getPoint(); $entity->setPoint($point); $entity = $this->setEntity($entity); log_message("notice", __FUNCTION__ . "=>{$entity}의 Point가 {$old_point}에서 {$entity->getPoint()}로 변경되었습니다."); } return $entity; } final public function setLevel(UserEntity $entity, int $level): UserEntity { if ($entity->getLevel() != $level) { $old_level = $entity->getLevel(); $entity->setLevel($level); $entity = $this->setEntity($entity); log_message("notice", __FUNCTION__ . "=>{$entity}의 Level이 {$old_level}에서 {$entity->getLevel()}로 변경되었습니다."); } return $entity; } final public function checkLevel(UserEntity $entity, int $level = null): UserEntity { //사용자 Point별 Level 계산 $level = intval(is_numeric($level) ? $level : $entity->getPoint() / MANGBOARD['point']['unit'] * MANGBOARD['point']['unit'] / MANGBOARD['point']['unit']); //관리자면 변경불가 if ($entity->getLevel() == MANGBOARD['admin']['level']) { return $entity; } //운영자면 7~9 if (MANGBOARD['manager']['level']['min'] <= $entity->getLevel() && $entity->getLevel() <= MANGBOARD['manager']['level']['max']) { $level = $level < MANGBOARD['manager']['level']['min'] ? MANGBOARD['manager']['level']['min'] : $level; $level = MANGBOARD['manager']['level']['max'] < $level ? MANGBOARD['manager']['level']['max'] : $level; } // echo "point:" . $entity->getPoint() . ",level:" . $level . "\n"; //사용자 Level 1~5; if (MANGBOARD['user']['level']['min'] <= $entity->getLevel() && $entity->getLevel() <= MANGBOARD['user']['level']['max']) { $level = $level < MANGBOARD['user']['level']['min'] ? MANGBOARD['user']['level']['min'] : $level; $level = MANGBOARD['user']['level']['max'] < $level ? MANGBOARD['user']['level']['max'] : $level; } // echo "point:" . $entity->getPoint() . ",level:" . $level . "\n"; return $this->setLevel($entity, $level); } }