Extra Form
PHP PHP 7.2
CMS Rhymix

메일 작성 세팅 후 그룹 선택하고 메일 발송을 하면 서버 오류가 발생합니다.

 

 

[07-Jul-2020 13:11:44 Etc/GMT-9] PHP Exception: ArgumentCountError #0 "Too few arguments to function ggmailingAdminModel::getGgmailingAdminSendEmail(), 0 passed in /public_html/files/cache/template/modules/ggmailing/tpl/send.html.php on line 96 and exactly 1 expected" in modules/ggmailing/ggmailing.admin.model.php on line 57

 


#0 /public_html/files/cache/template/modules/ggmailing/tpl/send.html.php(96): ggmailingAdminModel->getGgmailingAdminSendEmail()
#1 /public_html/classes/template/TemplateHandler.class.php(358): include()
#2 /public_html/classes/template/TemplateHandler.class.php(156): TemplateHandler->_fetch()
#3 /public_html/classes/display/HTMLDisplayHandler.php(87): TemplateHandler->compile()
#4 /public_html/classes/display/DisplayHandler.class.php(77): HTMLDisplayHandler->toDoc()
#5 /public_html/classes/module/ModuleHandler.class.php(1163): DisplayHandler->printContent()
#6 /public_html/index.php(52): ModuleHandler->displayContent()

 

XE시절에는 테스트를 해보지 않아 라이믹스에서만의 문제인지는 잘 모르겠습니다. 현재는 라이믹스 입니다.

 

 

 

 

send.html

 

<!--#include("./header.html")-->

<!--@if(Context::get('type')!='status')-->
<h3 class="sub_title">{$lang->send_list}</h3>
<!--@else-->
<h3 class="sub_title">메일전송 현황</h3>
<!--@end-->

<table class="index_table">
<span>Total:{$total_count}, Page:{$page}/{$total_page}</span>
    <thead>
        <tr>
            <th rowspan="2">no.</th>
            <th>{$lang->sender_nickname}</th>
            <th>{$lang->sender_email}</th>
            <th>{$lang->regdate}</th>
            <th>{$lang->receive_nickname}</th>
            <th>{$lang->receive_email}</th>
            <!--@if(Context::get('type')!='status')--><th>{$lang->send_start}</th><!--@else--><th>상태</th><!--@end-->
            <th>{$lang->delete}</th>
        </tr>
        <tr style="border-bottom:1px solid #000;">
            <th colspan="2">{$lang->title}</td>
            <th colspan="6">{$lang->content}</td>
        </tr>
    </thead>
    <tbody>
        <!--@foreach($mail_info as $key => $val)-->
        <tr style="border-top:2px solid #ddd;">
            <td rowspan="2">{$key}</td>
            <td>{cut_str($val->ggmailing_sender_nickname,8,'...')}</td>
            <td>{cut_str($val->ggmailing_sender_email,10,'...')}</td>
            <td>{zdate($val->regdate,'Y-m-d H:i:s')}</td>
            <td>
            {@ $nick_name = explode(',',$val->ggmailing_receive_nickname);    }
            <!--@for($i=0;$nick_name[$i];$i++)-->
            {@ $cnt = $i; }
            <!--@end-->
            {$nick_name[0]} 
            <!--@if($config->sender_num > 1 && $nick_name[1])-->{$lang->outof} {$cnt}{$lang->persons}<!--@end-->
            </td>
            <td>
            {@ $email_address = explode(',',$val->ggmailing_receive_email);    }
            <!--@for($i=0;$email_address[$i];$i++)-->
            {@ $cnt = $i; }
            <!--@end-->
            {$email_address[0]} 
            <!--@if($config->sender_num > 1 && $email_address[1])-->{$lang->outof} {$cnt}{$lang->email}<!--@end-->
            </td>
            <script>
                jQuery(document).ready(function() {
                    var url = './index.php';

                    var formData = new FormData();

                    var act = 'dispGgmailingRequest';
                    formData.append("act",act);
                    var ggmailing_document_srl = '{$val->ggmailing_document_srl}';
                    formData.append("ggmailing_document_srl",ggmailing_document_srl);
                    var ggmailing_send_srl = '{$val->ggmailing_send_srl}';
                    formData.append("ggmailing_send_srl",ggmailing_send_srl);

                    jQuery.ajax({
                        url: url,
                        type: 'POST',
                        data: formData,
                        async: true,
                        beforeSend: function (data) {
                            jQuery(".wfsr").show();
                        },
                        success: function (data) {
                            //alert(data);
                            jQuery(".wfsr").hide();
                            var result = JSON.parse(data);
                            if(result.is_sendok == 'Y') document.getElementById('ggstatus_{$key}').innerHTML = '{$lang->send_complete}';
                            else if(result.is_sendok == 'B') document.getElementById('ggstatus_{$key}').innerHTML = '대기열';
                            else if(result.is_sendok == 'W') document.getElementById('ggstatus_{$key}').innerHTML = '전송대기';
                            else if(result.is_sendok == 'S') document.getElementById('ggstatus_{$key}').innerHTML = '전송중';
                            else if(result.is_sendok == 'E') document.getElementById('ggstatus_{$key}').innerHTML = '오류';
                            //else if(!result) document.getElementById('ggstatus_{$key}').innerHTML = '서버점검중';
                            else jQuery("#ggsend_{$key}").show();
                        },
                        global: false,
                        cache: false,
                        contentType: false,
                        processData: false
                    });
                    return false;
                })
            </script>
            <td width="60" class="center">
                {@
                    $oGgmailingAdminModel = getAdminModel('ggmailing');
                    $ggstatus_key = $oGgmailingAdminModel->getGgmailingAdminSendEmail();
                }
                <!--@if($ggstatus_key->data[0]->is_sendok == 'W')-->
                {@ $is_sendok_msg = $lang->send_complete; }
                <!--@elseif($ggstatus_key->data[0]->is_sendok == 'N')-->
                {@ $is_sendok_msg = '대기'; }
                <!--@end-->


                <div id="ggstatus_{$key}">{$is_sendok_msg}</div>
                <!--@if(Context::get('type')!='status')-->
                <form action="/" method="post" id="ggsend_{$key}" style="display:none;">
                <input type="hidden" name="module" value="admin" />
                <input type="hidden" name="act" value="procGgmailingAdminSendOk" />
                <input type="hidden" name="ggmailing_send_srl" value="{$val->ggmailing_send_srl}" />
                <input type="hidden" name="page" value="{$page}" />
                <input type="submit" class="xet_btn medium light" value="{$lang->send_start}" />
                </form>
                <!--@else-->
                전송안됨
                <!--@end-->
            </td>
            
            <td width="60" class="center">
                <form action="/" method="post" name="delform_{$key}">
                <input type="hidden" name="module" value="admin" />
                <input type="hidden" name="act" value="procGgmailingAdminDel" />
                <input type="hidden" name="ggmailing_send_srl" value="{$val->ggmailing_send_srl}" />
                <a href="#" onclick="javascript:if(confirm('삭제하시겠습니까?')) document.delform_{$key}.submit(); else return false;" class="xet_btn medium red">{$lang->delete}</a>
                </form>
            </td>
        </tr>
        <tr>
            <td colspan="2">{cut_str($val->ggmailing_title,10,'...')}</td>
            <td colspan="6">{cut_str(htmlspecialchars($val->ggmailing_content),150,'...')}</td>
        </tr>
        <!--@end-->
    </table>
</table>
<!--@if(Context::get('type')!='status')-->
<div style="width:100%;margin:10px 0 auto;text-align:right;">
    <form action="/" method="post" name="sendall">
    <input type="hidden" name="module" value="admin" />
    <input type="hidden" name="act" value="procGgmailingAdminAllSendOk" />
    <input type="hidden" name="page" value="{$page}" />
    <a href="#" onclick="javascript:if(confirm('대기중인 모든 메일을 전송하시겠습니까?')) document.sendall.submit(); else return false;" class="xet_btn medium blue">모든 대기중인 메일을 전송</a>
    </form>
</div>
<!--@end-->
<form action="/" method="post" class="ggm_pagination">
    <input type="hidden" name="error_return_url" value="" />
    <input type="hidden" name="module" value="{$module}" />
    <input type="hidden" name="act" value="{$act}" />
    <ul>
        <li class="disabled"|cond="!$page || $page == 1"><a href="{getUrl('page', '')}">&laquo; {$lang->first_page}</a></li>

        <!--@while($page_no = $page_navigation->getNextPage())-->
        {@$last_page = $page_no}
        <li class="active"|cond="$page_no == $page"><a href="{getUrl('page', $page_no)}">{$page_no}</a></li>
        <!--@end-->

        <li class="disabled"|cond="$page == $page_navigation->last_page"><a href="{getUrl('page', $page_navigation->last_page)}" title="{$page_navigation->last_page}">{$lang->last_page} &raquo;</a></li>
    </ul>
</form>

<!--#include("./footer.html")-->

 

 

 

 

php 파일의 57번째 라인

    function getGgmailingAdminSendEmail($args){
        $output = executeQueryArray('ggmailing.getGgmailingAdminSendEmail', $args);
        return $output;
    }

  • ?
    php7.1 이후부터는 함수에서 변수를 사용시 반드시 값이 있거나 초기값 설정이 되어있어야해요

    ->getGgmailingAdminSendEmail() 로 사용되어서 그렀습니다

    function getGgmailingAdminSendEmail($args=null) 처럼 수정해주세요

    ps. http://sejin7940.co.kr/xe_tips/117103
  • ? profile
    class ggmailingAdminModel extends ggmailing {

    function init() {
    }

    function getGgmailingAdminList($args){
    $output = executeQueryArray('ggmailing.getGgmailingAdminList', $args);
    return $output;
    }

    function getGgmailingAdminSend($args){
    $output = executeQueryArray('ggmailing.getGgmailingAdminSend', $args);
    return $output;
    }
    function getGgmailingAdminSmsList($args){
    $output = executeQueryArray('ggmailing.getGgmailingAdminSmsList', $args);
    return $output;
    }
    function getGgmailingAdminSms($args){
    $output = executeQueryArray('ggmailing.getGgmailingAdminSms', $args);
    return $output;
    }

    function getGgmailingAdminSmsSend($args){
    $output = executeQueryArray('ggmailing.getGgmailingAdminSmsSend', $args);
    return $output;
    }
    function getEmailAddrList($args){
    $output = executeQueryArray('ggmailing.getEmailAddrList', $args);
    return $output;
    }
    function getEmailAddrAllowList($args){
    $output = executeQueryArray('ggmailing.getEmailAddrAllowList', $args);
    return $output;
    }
    function getGroupEmailAddrList($args){
    $output = executeQueryArray('ggmailing.getGroupEmailAddrList', $args);
    return $output;
    }
    function getGroupEmailAddrAllowList($args){
    $output = executeQueryArray('ggmailing.getGroupEmailAddrAllowList', $args);
    return $output;
    }
    function getGgmailingAdminEmail($args){
    $output = executeQueryArray('ggmailing.getGgmailingAdminEmail', $args);
    return $output;
    }
    function getGgmailingAdminSendEmail($args){
    $output = executeQueryArray('ggmailing.getGgmailingAdminSendEmail', $args);
    return $output;
    }
    function getGgmailingAdminMemberList($args){
    $output = executeQueryArray('ggmailing.getGgmailingAdminMemberList', $args);
    return $output;
    }
    function getGgmailingAdminGateway($args){
    $output = executeQueryArray('ggmailing.getGateway', $args);
    return $output;
    }
    }
    ?>

    모든 함수를 다 똑같이 고쳐줘야 할까요???
  • profile profile
    에러가 나고 잇는 부분만 바꾸시면 됩니다.

    getGgmailingAdminSendEmail 에서만 나타나고 있으니 고치시면 되는데..

    위스킨에서 $ggstatus_key = $oGgmailingAdminModel->getGgmailingAdminSendEmail(); 를 따로 호출 한 이유가 궁금하네요.

    getGgmailingAdminSendEmail 여기에 들어간 쿼리가 무엇이냐에 따라 args가 필수일 경우가 잇어서 = null을 기본값으로 주어도되는지 아닌지부터 판단해보셔야할 부분인 것 같습니다.
  • profile ?
    일단 지금 에러나는 함수가
    getGgmailingAdminSendEmail 니까.. getGgmailingAdminSendEmail 만 해주셔도 됩니다.

    함수 지정할때 초기값이 꼭 필요한건 아니고
    다른 곳에서 함수 호출할때 변수를 전달하고 있으면 문제 되진 않거든요

    단지 지금처럼 아무 변수 없이 호출할때만 문제되는거여서
  • ? profile
    네. 그럼 다른 기능들 사용해 보면서 필요할때 추가하는 식으로 하겠습니다. 좋은 답변으로 해결되어 감사합니다.
  • profile
    https://github.com/ForPeople/WooriAlim 이곳에 제보해 주시면 수정해 둘께용
  • profile
    오래전에 만들고 기능적으로 업데이트를 잘 안해서 많이 부족합니다. 이슈에 등록해 주시면 차후 개선할께요.