Ignore:
Timestamp:
2008/04/07 18:24:45 (16 years ago)
Author:
adachi
Message:

サイバーソース決済モジュール暫定コミット

Location:
branches/version-1/data/downloads/module/mdl_cybs
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • branches/version-1/data/downloads/module/mdl_cybs/class/mdl_cybs_config.php

    r17224 r17230  
    161161     * ²ñ°÷¤Î¥µ¥Ö¥¹¥¯¥ê¥×¥·¥ç¥óID¤òÊÖ¤¹. 
    162162     * 
     163     * array( 
     164     *    'subs_id' => '***', 
     165     *    'merchant_ref_number' => '***', 
     166     * ), 
     167     * array( 
     168     *    'subs_id' => '***', 
     169     *    'merchant_ref_number' => '***', 
     170     * ), 
     171     * ... 
     172     * 
    163173     * @return array 
    164174     */ 
     
    166176        $objCustomer = new SC_Customer; 
    167177        $objCustomer->updateSession(); 
    168         $subsIdsString = $objCustomer->getValue('cybs_subs_id'); 
    169  
    170         if (is_null($subsIdsString)) { 
     178        $subsDataString = $objCustomer->getValue('cybs_subs_id'); 
     179 
     180        if (is_null($subsDataString)) { 
    171181            return array(); 
    172182        } 
    173183 
    174         $arrSubsIds = unserialize($subsIdsString); 
    175  
    176         return is_array($arrSubsIds) ? $arrSubsIds : array(); 
     184        $subsData = unserialize($subsDataString); 
     185 
     186        return is_array($subsData) ? $subsData : array(); 
    177187    } 
    178188 
     
    181191     * 
    182192     * @param string $subsId 
     193     * @param integer $merchant_ref_number 
    183194     * @param array $arrSubsResults 
    184195     */ 
    185     function addSubsId($subsId) { 
     196    function addSubsId($subsId, $merchant_ref_number) { 
    186197        if (!$this->canAddSubsId()) { 
    187198            return; 
     
    192203        $arrSubsId = $this->getSubsIds(); 
    193204 
    194         print_r($arrSubsId); 
    195205        // ¥µ¥Ö¥¹¥¯¥ê¥×¥·¥ç¥óID¤¬´û¤Ë¸ºß¤¹¤ë¾ì¹ç¤ÏÄɲ䷤ʤ¤ 
    196         if (in_array($subsId, $arrSubsId)) return; 
    197  
    198         $arrSubsId[] = $subsId; 
     206        foreach($arrSubsId as $subs) { 
     207            if ($subs['subs_id'] == $subsId) { 
     208                return; 
     209            } 
     210        } 
     211 
     212        $arrSubsId[] = array( 
     213            'subs_id' => $subsId, 
     214            'merchant_ref_number' => $merchant_ref_number); 
    199215        $arrUpdate = array('cybs_subs_id' => serialize($arrSubsId)); 
    200216 
     
    209225     */ 
    210226    function canAddSubsId() { 
    211         $arrSubsIds = $this->getSubsIds(); 
    212         if (is_array($arrSubsIds) && count($arrSubsIds) < MDL_CYBS_SUBS_ID_MAX) { 
     227        $arrSubsData = $this->getSubsIds(); 
     228        if (is_array($arrSubsData) && count($arrSubsData) < MDL_CYBS_SUBS_ID_MAX) { 
    213229            return true; 
    214230        } 
  • branches/version-1/data/downloads/module/mdl_cybs/mdl_cybs.inc

    r17224 r17230  
    9090); 
    9191 
     92define('MDL_CYBS_CREDIT_STATUS_AUTH', '1'); // Í¿¿® 
     93define('MDL_CYBS_CREDIT_STATUS_AUTHCANCEL', '2');// Í¿¿®¼è¤ê¾Ã¤· 
     94define('MDL_CYBS_CREDIT_STATUS_CAPTURE', '3'); // Çä¾å 
     95define('MDL_CYBS_CREDIT_STATUS_RETURN', '4'); // ÊÖ¶â 
     96 
     97$arrCybsCreditStatus = array( 
     98    MDL_CYBS_CREDIT_STATUS_AUTH => 'Í¿¿®', 
     99    MDL_CYBS_CREDIT_STATUS_AUTHCANCEL => 'Í¿¿®¼è¾Ã', 
     100    MDL_CYBS_CREDIT_STATUS_CAPTURE => 'Çä¾å', 
     101    MDL_CYBS_CREDIT_STATUS_RETURN => 'ÊÖ¶â' 
     102); 
    92103?> 
  • branches/version-1/data/downloads/module/mdl_cybs/mdl_cybs.php

    r17224 r17230  
    2222$objForm = lfInitParam($_POST); 
    2323$objPage->arrForm = $objForm->getFormParamList(); 
     24 
     25sfAlterMemo(); // dtb_memo¤Ëmemo¥«¥é¥à¤òÄɲ乤ë 
    2426 
    2527$mode = isset($_POST['mode']) ? $_POST['mode'] : ''; 
  • branches/version-1/data/downloads/module/mdl_cybs/mdl_cybs_credit.php

    r17224 r17230  
    5353$uniqid = sfCheckNormalAccess($objSiteSess, $objCartSess); 
    5454 
     55// ¥«¡¼¥È½¸·×½èÍý 
     56$objPage = sfTotalCart($objPage, $objCartSess, $arrInfo); 
     57// °ì»þ¼õÃí¥Æ¡¼¥Ö¥ë¤ÎÆɹþ 
     58$arrData = sfGetOrderTemp($uniqid); 
     59// ¥«¡¼¥È½¸·×¤ò¸µ¤ËºÇ½ª·×»» 
     60$arrData = sfTotalConfirm($arrData, $objPage, $objCartSess, $arrInfo); 
     61 
    5562$objForm = lfInitParam($_POST); 
    5663$objPage->arrForm = $objForm->getFormParamList(); 
     
    6471        break; 
    6572    } 
    66  
    67     // ¥«¡¼¥È½¸·×½èÍý 
    68     $objPage = sfTotalCart($objPage, $objCartSess, $arrInfo); 
    69     // °ì»þ¼õÃí¥Æ¡¼¥Ö¥ë¤ÎÆɹþ 
    70     $arrData = sfGetOrderTemp($uniqid); 
    71     // ¥«¡¼¥È½¸·×¤ò¸µ¤ËºÇ½ª·×»» 
    72     $arrData = sfTotalConfirm($arrData, $objPage, $objCartSess, $arrInfo); 
    7373 
    7474    /** 
     
    8080        if (!$objCybs->canAddSubsId()) { 
    8181            $objPage->tpl_error = 'ÅÐÏ¿½ÐÍè¤ë¥«¡¼¥É¤Î·ï¿ô¤Ï' . MDL_CYBS_SUBS_ID_MAX . "·ï¤Þ¤Ç¤Ç¤¹¡£\n"; 
    82             gfPrintLog(' -> ondemand error: over card max', MDL_CYBS_LOG); 
     82            gfPrintLog(' -> ondemand error: over card max ', MDL_CYBS_LOG); 
    8383            break; 
    8484        } 
     
    9393        // ¥µ¥Ö¥¹¥¯¥ê¥×¥·¥ç¥óID¤ò¸ÜµÒ¥Æ¡¼¥Ö¥ë¤ØÄɲ乤ë 
    9494        $subsId = $arrResults['pay_subscription_create_subscription_id']; 
    95         $objCybs->addSubsId($subsId); 
     95        $objCybs->addSubsId($subsId, $arrResults['merchant_ref_number']); 
    9696    } 
    9797 
     
    155155 
    156156    $objSiteSess->setRegistFlag(); 
    157     //lfRegisterOrderTemp($uniqid, $objForm->getHashArray(), $arrResults); 
     157    lfRegisterOrderTemp($uniqid, $objForm->getHashArray(), $arrResults); 
    158158    header("Location: " . URL_SHOP_COMPLETE); 
    159159    exit; 
     160    break; 
     161 
     162// ÅÐÏ¿¥«¡¼¥É¤Î»ÈÍÑ 
     163case 'ondemand': 
     164    // ÆþÎϹàÌܤθ¡¾Ú 
     165    $subsId = $objForm->getValue('subs_id'); 
     166    $arrErr = $objForm->checkError(); 
     167    if (empty($subsId) || !empty($arrErr['subs_id'])) { 
     168        $objPage->arrErr['subs_id'] = '¢¨¡¡»ÈÍѤ¹¤ë¥«¡¼¥É¤òÁªÂò¤·¤Æ²¼¤µ¤¤¡£'; 
     169        break; 
     170    } 
     171 
     172    $arrSendParam = lfCreateAuthParam($objForm->getHashArray(), $arrData); 
     173    $arrSendParam = lfCreateOndemandAuthParam($subsId, $arrSendParam); 
     174    $arrResults = lfSendRequest($arrSendParam); 
     175    if (PEAR::isError($e = lfIsError($arrResults))) { 
     176        $objPage->tpl_error = $e->getMessage(); 
     177        gfPrintLog(' -> auth error: ' . $e->getMessage(), MDL_CYBS_LOG); 
     178        gfPrintLog(print_r($arrResults, true), MDL_CYBS_LOG); 
     179        break; 
     180    } 
     181 
     182    $objSiteSess->setRegistFlag(); 
     183    lfRegisterOrderTemp($uniqid, $objForm->getHashArray(), $arrResults); 
     184    header("Location: " . URL_SHOP_COMPLETE); 
     185    exit; 
     186    break; 
    160187 
    161188// ¥Ñ¥¹¥ï¡¼¥ÉÆþÎϤ«¤é¤ÎÌá¤ê 
    162189case 'verify3d': 
    163     // ¥«¡¼¥È½¸·×½èÍý 
    164     $objPage = sfTotalCart($objPage, $objCartSess, $arrInfo); 
    165     // °ì»þ¼õÃí¥Æ¡¼¥Ö¥ë¤ÎÆɹþ 
    166     $arrData = sfGetOrderTemp($uniqid); 
    167     // ¥«¡¼¥È½¸·×¤ò¸µ¤ËºÇ½ª·×»» 
    168     $arrData = sfTotalConfirm($arrData, $objPage, $objCartSess, $arrInfo); 
    169  
    170190    // ¸¡¾Ú+Í¿¿®¥ê¥¯¥¨¥¹¥È¤òÁ÷¿®¤¹¤ë 
    171191    $obj3DForm = lfInit3DParam($_POST); 
     
    179199 
    180200    $objSiteSess->setRegistFlag(); 
     201    lfRegisterOrderTemp($uniqid, $objForm->getHashArray(), $arrResults); 
    181202    header("Location: " . URL_SHOP_COMPLETE); 
     203    exit; 
    182204    break; 
    183205 
     
    190212// Ä̾ïɽ¼¨ 
    191213default: 
    192     // TODO ¥ª¥ó¥Ç¥Þ¥ó¥É¼èÆÀ 
    193  
    194 } 
     214} 
     215 
     216lfSetCardInfo($objPage); // ÅÐÏ¿ºÑ¤ß¥«¡¼¥É¾ðÊó¤ò¥»¥Ã¥È¤¹¤ë 
    195217 
    196218$objView->assignobj($objPage); 
    197219$objView->display(SITE_FRAME); 
     220 
    198221sfPrintR($_POST, 'blue'); 
    199222sfPrintR($objPage, 'red'); 
     223 
     224function lfSetCardInfo(&$objPage) { 
     225    $objCybs =& Mdl_Cybs_Config::getInstanse(); 
     226    // ¥ª¥ó¥Ç¥Þ¥ó¥É²Ý¶â¤¬Ìµ¸ú¤Ê¤éreturn 
     227    if (!$objCybs->enableOndemand()) { 
     228        return; 
     229    } 
     230 
     231    // ¥µ¥Ö¥¹¥¯¥ê¥×¥·¥ç¥óID¤ò¼èÆÀ 
     232    $arrSubsIds = $objCybs->getSubsIds(); 
     233    $objPage->cardCount = 0; // ¥µ¥Ö¥¹¥¯¥ê¥×¥·¥ç¥ó¤ÎÅÐÏ¿·ï¿ô 
     234    foreach ($arrSubsIds as $subs) { 
     235        $arrResults = lfSendRequest(lfCreateOndemandRetParam($subs['subs_id'], $subs['merchant_ref_number'])); 
     236 
     237        if (PEAR::isError($e = lfIsError($arrResults))) { 
     238            $objPage->tpl_error = $e->getMessage(); 
     239            gfPrintLog(' -> get subs info error: ' . $e->getMessage(), MDL_CYBS_LOG); 
     240            gfPrintLog(print_r($arrResults, true), MDL_CYBS_LOG); 
     241            return; 
     242        } 
     243        $objPage->cardCount++; 
     244        $objPage->arrCard[] = $arrResults; // ¥«¡¼¥É¾ðÊó¤ò¥Æ¥ó¥×¥ì¡¼¥È¤Øassign 
     245    } 
     246} 
     247 
    200248/** 
    201249 * ¥â¡¼¥É¤ò¼èÆÀ¤¹¤ë 
     
    248296    $objForm->addParam("»ÙʧÊýË¡", "paymethod", STEXT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK")); 
    249297    $objForm->addParam("¥«¡¼¥É¾ðÊó¤ÎÅÐÏ¿", "register_ondemand", 1, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 
     298    $objForm->addParam("»ÈÍѤ¹¤ë¥«¡¼¥É", "subs_id", MTEXT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 
    250299    $objForm->setParam($arrParam); 
    251300    $objForm->convParam(); 
     
    263312    $objRequest = new CYBS_REQ; 
    264313 
     314    foreach ($arrSendParam as $key => $value) { 
     315        $objRequest->add_request($key, $value); 
     316    } 
     317 
     318    $arrSendParam['customer_cc_number'] = ''; // ¥«¡¼¥ÉÈÖ¹æ¤Ï¥í¥°Êݸ¤·¤Ê¤¤¡£ 
    265319    gfPrintLog('### send request param ###', MDL_CYBS_LOG); 
    266320    gfPrintLog(print_r($arrSendParam, true), MDL_CYBS_LOG); 
    267  
    268     foreach ($arrSendParam as $key => $value) { 
    269         $objRequest->add_request($key, $value); 
    270     } 
    271321 
    272322    if ( ($result = cybs_send($objRequest->requests)) == false ) { 
     
    360410} 
    361411 
     412function lfCreateOndemandRetParam($subsId, $merchant_ref_number) { 
     413    global $arrCybsRequestURL; 
     414 
     415    $objConfig =& Mdl_Cybs_Config::getInstanse(); 
     416    $arrConfig = $objConfig->getConfig(); 
     417 
     418    return array( 
     419        'subscription_id'     => $subsId, 
     420        "ics_applications"    => "ics_pay_subscription_retrieve", 
     421        "server_host"         => $arrCybsRequestURL[$arrConfig['cybs_request_url']], 
     422        "server_port"         => "80", 
     423        'merchant_id'         => $arrConfig['cybs_merchant_id'], 
     424        'merchant_ref_number' => $merchant_ref_number, 
     425    ); 
     426} 
    362427/** 
    363428 * ics_pa_enroll¥Ñ¥é¥á¡¼¥¿¤ò¹½ÃÛ¤¹¤ë. 
     
    549614 */ 
    550615function lfRegisterOrderTemp($uniqid, $arrForm, $arrResults) { 
    551     $sqlval = array(); 
    552     $sqlval['memo03'] = $arrForm['card_name01'] . " " . $arrForm['card_name02']; 
    553     //$sqlval['memo02'] = serialize($arrResults['auth_auth_code']); 
     616    $sqlval = array( 
     617        'memo06' => 1, 
     618        'memo07' => $arrResults['request_token'], 
     619        'memo08' => $arrResults['request_id'], 
     620        //'memo08' => $arrResults[''], 
     621        //'memo09' => $arrResults[''], 
     622        //'memo10' => $arrResults[''], 
     623    ); 
    554624 
    555625    $objQuery = new SC_Query; 
  • branches/version-1/data/downloads/module/mdl_cybs/mdl_cybs_credit.tpl

    r17224 r17230  
    177177                            </tr> 
    178178                            <!--{if $enable_ondemand}--> 
    179                             <tr> 
    180                                 <td class="fs12" bgcolor="#f3f3f3">¤³¤Î¥«¡¼¥É¾ðÊó¤òÅÐÏ¿¤¹¤ë</td> 
    181                                 <td bgcolor="#ffffff"> 
    182                                 <table cellspacing="0" cellpadding="0" summary=" "> 
    183                                     <tr> 
    184                                         <!--{assign var=key value="register_ondemand"}--> 
    185                                         <td class="fs12n"> 
    186                                         <span class="red"><!--{$arrErr[$key]}--></span> 
    187                                         <input type="checkbox" 
    188                                                name="<!--{$key}-->" 
    189                                                value="1" 
    190                                                maxlength="<!--{$arrForm[$key].length}-->" 
    191                                                style="<!--{$arrErr[$key]|sfGetErrorColor}-->" <!--{if $arrForm[$key].value}-->checked=checked<!--{/if}-->>¥«¡¼¥É¾ðÊó¤òÅÐÏ¿¤¹¤ë<br> 
    192                                                ¢¨¥«¡¼¥É¤òÅÐÏ¿¤¹¤ë¤È¡¢¼¡²ó°Ê¹ßÅÐÏ¿¤·¤¿¥«¡¼¥É¤ò»ÈÍѤ¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£ 
    193                                         </select></td> 
    194                                     </tr> 
    195                                 </table> 
    196                                 </td> 
    197                             </tr> 
     179                            <tr> 
     180                                <td class="fs12" bgcolor="#f3f3f3">¤³¤Î¥«¡¼¥É¾ðÊó¤òÅÐÏ¿¤¹¤ë</td> 
     181                                <td bgcolor="#ffffff"> 
     182                                <table cellspacing="0" cellpadding="0" summary=" "> 
     183                                    <tr> 
     184                                        <!--{assign var=key value="register_ondemand"}--> 
     185                                        <td class="fs12n"> 
     186                                        <span class="red"><!--{$arrErr[$key]}--></span> 
     187                                        <input type="checkbox" 
     188                                               name="<!--{$key}-->" 
     189                                               value="1" 
     190                                               maxlength="<!--{$arrForm[$key].length}-->" 
     191                                               style="<!--{$arrErr[$key]|sfGetErrorColor}-->" <!--{if $arrForm[$key].value}-->checked=checked<!--{/if}-->>¥«¡¼¥É¾ðÊó¤òÅÐÏ¿¤¹¤ë<br> 
     192                                               ¢¨¥«¡¼¥É¤òÅÐÏ¿¤¹¤ë¤È¡¢¼¡²ó°Ê¹ßÅÐÏ¿¤·¤¿¥«¡¼¥É¤ò»ÈÍѤ¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£ 
     193                                        </select></td> 
     194                                    </tr> 
     195                                </table> 
     196                                </td> 
     197                            </tr> 
    198198                            <!--{/if}--> 
    199199                        </table> 
     
    218218                            </tr> 
    219219                        </table> 
    220  
    221                         </td> 
    222                     </tr> 
    223                 </table> 
     220                        </td> 
     221                    </tr> 
     222                </table> 
     223 
     224                <!--{if $enable_ondemand && $cardCount > 0}--> 
     225                <table width="666" border="0" cellspacing="0" cellpadding="0" summary=" "> 
     226                    <tr><td height="5" class="fs12"></td></tr> 
     227                    <tr> 
     228                        <td bgcolor="#cccccc"> 
     229                        <table width="666" border="0" cellspacing="1" cellpadding="10" summary=" "> 
     230                            <tr> 
     231                                <td class="fs12" bgcolor="#f3f3f3">ÅÐÏ¿ºÑ¤ß¤Î¥«¡¼¥É¤ò»ÈÍѤ¹¤ë¾ì¹ç¤Ï¡¢»ÈÍѤ¹¤ë¥«¡¼¥É¤òÁªÂò¤·¤Æ²¼¤µ¤¤¡£</td> 
     232                            </tr> 
     233                        </table> 
     234                        </td> 
     235                    </tr> 
     236                    <tr><td height="5" class="fs12"></td></tr> 
     237                    <tr> 
     238                        <td bgcolor="#cccccc"> 
     239                        <table width="666" border="0" cellspacing="1" cellpadding="10" summary=" "> 
     240                            <tr> 
     241                                <td class="fs12" bgcolor="#f3f3f3">ÁªÂò</td> 
     242                                <td class="fs12" bgcolor="#f3f3f3">¥«¡¼¥ÉÈÖ¹æ</td> 
     243                                <td class="fs12" bgcolor="#f3f3f3">Í­¸ú´ü¸Â</td> 
     244                            </tr> 
     245                            <!--{if $arrErr.subs_id}--> 
     246                            <tr> 
     247                                <td class="fs12" bgcolor="#ffffff" colspan="3"><span class="red"><!--{$arrErr.subs_id}--></span></td> 
     248                            </tr> 
     249                            <!--{/if}--> 
     250                            <!--{foreach from=$arrCard item=card}--> 
     251                            <tr> 
     252                                <td class="fs12" bgcolor="#ffffff"><input type="radio" name="subs_id" value="<!--{$card.pay_subscription_retrieve_subscription_id}-->"></td> 
     253                                <td class="fs12" bgcolor="#ffffff"><!--{$card.pay_subscription_retrieve_customer_cc_number}--></td> 
     254                                <td class="fs12" bgcolor="#ffffff"> 
     255                                    <!--{$card.pay_subscription_retrieve_customer_cc_expmo}-->·î/<!--{$card.pay_subscription_retrieve_customer_cc_expyr}--> 
     256                                </td> 
     257                            </tr> 
     258                            <!--{/foreach}--> 
     259                        </table> 
     260                        </td> 
     261                    </tr> 
     262                </table> 
     263 
     264                <table width="666" border="0" cellspacing="0" cellpadding="0" summary=" "> 
     265                    <tr><td height="5"></td></tr> 
     266                    <tr> 
     267                        <td align="center" bgcolor="#f7f5f4"> 
     268                        <table width="666" border="0" cellspacing="0" cellpadding="6" summary=" "> 
     269                            <tr> 
     270                                <td class="fs12st" align="center">°Ê¾å¤ÎÆâÍƤǴְ㤤¤Ê¤±¤ì¤Ð¡¢²¼µ­¡ÖÃíʸ´°Î»¥Ú¡¼¥¸¤Ø¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£<br> 
     271                                <span class="orange">¢¨²èÌ̤¬ÀÚ¤êÂؤë¤Þ¤Ç¾¯¡¹»þ´Ö¤¬¤«¤«¤ë¾ì¹ç¤¬¤´¤¶¤¤¤Þ¤¹¤¬¡¢¤½¤Î¤Þ¤Þ¤ªÂÔ¤Á¤¯¤À¤µ¤¤¡£</span></td> 
     272                            </tr> 
     273                            <tr> 
     274                                <td align="center" height="40" bgcolor="#f7f5f4"> 
     275                                    <a href="#" onclick="document.form2.submit(); return false;" onmouseover="chgImgImageSubmit('<!--{$smarty.const.URL_DIR}-->img/common/b_back_on.gif',back03)" onmouseout="chgImgImageSubmit('<!--{$smarty.const.URL_DIR}-->img/common/b_back.gif',back03)"><img src="<!--{$smarty.const.URL_DIR}-->img/common/b_back.gif" width="150" height="30" alt="Ìá¤ë" border="0" name="back03" id="back03"/></a><img src="<!--{$smarty.const.URL_DIR}-->img/_.gif" width="12" height="" alt="" /> 
     276                                    <input type="image" onclick="document.form1['mode'].value = 'ondemand'; return fnCheckSubmit();" onmouseover="chgImgImageSubmit('<!--{$smarty.const.URL_DIR}-->img/common/b_next_on.gif',this)" onmouseout="chgImgImageSubmit('<!--{$smarty.const.URL_DIR}-->img/common/b_next.gif',this)" src="<!--{$smarty.const.URL_DIR}-->img/common/b_next.gif" width="150" height="30" alt="¼¡¤Ø" border="0" name="next" id="next" /> 
     277                                </td> 
     278                            </tr> 
     279                        </table> 
     280 
     281                        </td> 
     282                    </tr> 
     283                </table> 
     284                <!--{/if}--> 
     285 
    224286                </td> 
    225287            </tr> 
Note: See TracChangeset for help on using the changeset viewer.