제로보드XE로 홈페이지를 꾸민 경우 설문조사 모듈은 때때로 아주 유용하며 재미있다. 그런데, 제로보드XE의 설문조사 모듈은 기본적으로 로그인하지 않은 상태에서도 설문에 참여할 수 있기 때문에 때로는 이것이 문제가 될 수도 있다. 그래서 로그인하지 않은 사용자는 설문조사에 참여할 수 없도록 하기 위해 조금 손을 봐줄 필요가 있다. 이 기능이 설문조사 모듈에서 설정을 통해 정할 수 있으면 참 좋을텐데, 그렇지 않기 때문에 직접 코드를 수정해줄 수 밖에 없다.

우선 modules/poll/poll.model.php 파일에 있는 isPolled() 함수를 수정한다.

modules/poll/poll.model.php
        function isPolled($poll_srl) {
            $args->poll_srl = $poll_srl;

            if(Context::get('is_logged')) {
                $logged_info = Context::get('logged_info');
                $args->member_srl = $logged_info->member_srl;
            } else {
                $args->ipaddress = $_SERVER['REMOTE_ADDR'];
            }
            $output = executeQuery('poll.getPollLog', $args);
            if($output->data->count) return true;
            return false;
        }

이렇게 되어 있는 함수를

modules/poll/poll.model.php
        function isPolled($poll_srl) {
            $args->poll_srl = $poll_srl;

            if(Context::get('is_logged')) {
                $logged_info = Context::get('logged_info');
                $args->member_srl = $logged_info->member_srl;
            }
            $args->ipaddress = $_SERVER['REMOTE_ADDR'];

            $output = executeQuery('poll.getPollLog', $args);
            if($output->data->count) return true;
            return false;
        }

와 같이 25, 26, 27번째 줄을 수정한다. 이 함수를 수정하는 것은 실제로 로그인하지 않은 사용자가 설문조사에 참여하지 못하도록 하는 것과는 큰 관계는 없지만, 이렇게 함으로 중복 투표를 막을 수 있기 때문에 수정하는 것이다.

그런 다음, 같은 파일의 getPollHtml() 함수를 수정한다.

modules/poll/poll.model.php
            if($poll->stop_date > date("Ymd")) {
                if($this->isPolled($poll_srl)) $tpl_file = "result";
                else $tpl_file = "form";
            } else {
                $tpl_file = "result";
            }

이렇게 되어 있는 부분을

modules/poll/poll.model.php
            if($poll->stop_date > date("Ymd")) {
                if($this->isPolled($poll_srl) or !Context::get('is_logged')) $tpl_file = "result";
                else $tpl_file = "form";
            } else {
                $tpl_file = "result";
            }

이와 같이 수정해준다.

이제 로그인하지 않은 사용자의 경우 설문조사 화면에서 결과 화면을 보여줌으로 결과적으로 로그인하지 않으면 설문조사에 참여할 수 없게 된다.

단, 이렇게 수정을 하면 모든 설문조사에 참여하고자할 때는 로그인을 해야한다. 따라서, 경우에 따라 로그인하지 않은 사용자가 설문조사에 참여하도록 하기 위해서는 이렇게 수정해서는 안된다.

각각의 설문조사에서 로그인한 사용자만 참여 가능하도록 설정하기 위해서는 DB 테이블 등을 수정해줘야 하기 때문에 현재로서는 별로 권하고 싶지 않다.