2011年4月28日木曜日

WiMAX導入しました。

ゴールデンウィークを前に、お客さんのサポート体制を整備しないといけなくなりました。

お客様によっては休日がメインの場合もあります。個人向けサービスや販売は特にそうですね。

今までは、Wi-Fiや3Gを利用していましたが、都内ではなんとかなるも旅先では心もとないです。また、WeeklyCMSがマイクロソフトとタイアップして放送する事になってUSTでの回線確保も必須です。そこで問題となるのは、社内イントラのセキュリティです。通常一定数のクライアントを持つ企業ではプロキシを導入してセキュリティを確保するのが一般的です。そこれ解放するポートを限定しますが、USTの場合一般的なHTTPのポートではなく「1935,6667」のポートを使います。

で、普通に放送を開始しようと思うと蹴られます。
What firewall ports need to be opened for Ustream?
Open ports 1935 for both TCP/UDP in/out and the IRC chat port of 6667.

「これを明けて下さい!」と行った時に「本社セキュリティ部門と調整が必要です!」となるといつ決裁が降りるかわかりませんね。イベントを打つ部署ではスピード命です。

そんな時「じゃあ、回線をイベンターが確保します」とかの話になってしまうわけですが、3Gだと途切れる事多々有りですし、Wi-Fiはプロキシなのでポート空いてないという「放送できないヨ〜」という痛い状況になる訳です。USTできずorzというのはイベンターにとって致命的なので解決策を探っていた所 、WiMAXが有るじゃない!

 これなら下り最大20Mbps、上り最大6MbpsというUSTできる環境をゲットできる!という事でゴールデンウィーク目の前に急遽、UQ MAXとY電気でコラボしたルータ1円、月額3,880円を導入と相成りました。

Instagram画像(ムックと俺)

急遽、ガラケー一昨日買い増し、iPhone4去年9月、WiMAX昨日という「どんだけ〜」な通信環境を導入してしまったわけですが・・・。

これだけあるとどれか削らないといけません。

結局、iPhone4いらないよね〜と相成りました。違約金を考えるとただのWi-Fi端末として使う事になりそうです。

WiMAX+iPad2という新たな物欲が頭をもたげるのですが・・・続きはいずれまた。

2011年4月25日月曜日

XOOPS Cubeでメールアドレス・ログインを実現する実践編

メールログイン自体はGIJOE氏のpreloadで実現します。


以下、User_EmailLogin.class.php をpreloadフォルダへ入れます。
<?php

if( ! defined( 'XOOPS_ROOT_PATH' ) ) exit ;

class User_EmailLogin extends XCube_ActionFilter
{
    function preFilter()
    {
        $root =& XCube_Root::getSingleton();
        $root->mDelegateManager->add("Site.CheckLogin", array( &$this , 'checkLogin') ) ;
    }

    function checkLogin(&$xoopsUser)
    {
        if (is_object($xoopsUser)) {
            return;
        }

        $root =& XCube_Root::getSingleton();
        $root->mLanguageManager->loadModuleMessageCatalog('user');

        $userHandler =& xoops_getmodulehandler('users', 'user');
       
        $criteria =& new CriteriaCompo();
        $criteria->add(new Criteria('email', xoops_getrequest('uname')));
        $criteria->add(new Criteria('pass', md5(xoops_getrequest('pass'))));
       
       
        $userArr =& $userHandler->getObjects($criteria);
       
        if (count($userArr) != 1) {
            return;
        }
       
        if ($userArr[0]->get('level') == 0) {
            // TODO We should use message "_MD_USER_LANG_NOACTTPADM"
            return;
        }
       
        $handler =& xoops_gethandler('user');
        $user =& $handler->get($userArr[0]->get('uid'));
       
        $xoopsUser = $user;
   
        //
        // Regist to session
        //
        $root->mSession->regenerate();
        $_SESSION = array();
        $_SESSION['xoopsUserId'] = $xoopsUser->get('uid');
        $_SESSION['xoopsUserGroups'] = $xoopsUser->getGroups();
    }
}
?>

落とし穴はここから。

このままだとユーザー名の上限である25文字以上のメールアドレス使っているユーザーはメールアドレスを入力できません。

そこで、userモジュールのブロックテンプレートuser_block_login.htmlのmaxlengthを25文字でなくメールアドレスの最大文字長である255文字に変えます。
<form action="<{$xoops_url}>/user.php" method="post" style="margin-top: 0px;">
    <{$smarty.const._MB_USER_USERNAME}><br />
    <{xoops_input type=text name=uname size=12 value=$block.unamevalue maxlength=255 id="`$smarty.const.XOOPS_INPUT_DEFID_PREFIX`block_uname"}><br />
    <{$smarty.const._MB_USER_PASSWORD}><br />
    <{xoops_input type=password name=pass size=12 maxlength=32 id="`$smarty.const.XOOPS_INPUT_DEFID_PREFIX`block_pass"}><br />
<!--<label><{xoops_input type=checkbox name=rememberme value=On class=formButton}><{$smarty.const._MB_USER_REMEMBERME}></label><br />-->
    <input type="hidden" name="xoops_redirect" value="<{$xoops_requesturi}>" />
    <{xoops_input type=hidden name=op value=login id="`$smarty.const.XOOPS_INPUT_DEFID_PREFIX`block_op"}>
    <{xoops_input type=submit name=submit value=$smarty.const._MB_USER_LOGIN id="`$smarty.const.XOOPS_INPUT_DEFID_PREFIX`block_submit"}><br />
</form>
<{if $block.use_ssl == '1'}>
  <a href="javascript:openWithSelfMain('<{$block.sslloginlink}>', 'ssllogin', 300, 200);"><{$smarty.const._MB_USER_SECURE}></a>
<{/if}>
<a href="<{$xoops_url}>/lostpass.php"><{$smarty.const._MB_USER_LOSTPASS}></a>
<br /><br />
<{if $block.allow_register == '1'}>
  <a href="<{$xoops_url}>/register.php"><{$smarty.const._MB_USER_USERREG}></a>
<{/if}>
 これで一件落着と思いきやもう一つ見逃してはなりません。WizMobileで携帯対応しているならこれも手を入れる必要があります。

xoops_trust_pathのmodules/wizmobile/templates/main_login.html

これを開いてこっちも255文字へ上限を変更。これでやっとXOOPS Cube のメールアドレスログインが実現します。おっと、WziMobileのバージョンは最新版をダウンロードするのをお忘れなく。Ver0.51以降は簡単ログインでチケット処理が追加されてます。
<div id="<{$wizmobile_dirname}>Login">
  <form action="<{$xoops_url}>/modules/<{$wizmobile_dirname}>/index.php" method="post">
    <input type="hidden" name="act" value="Login" />
    <{wiz_gticket area=$wizmobile_dirname}>
    <input type="submit" value="<{"WIZMOBILE_LANG_SIMPLE_LOGIN"|wiz_constant}>" />
  </form>
  <span style="margin-top: 1em; color: #ff0000;"><{"WIZMOBILE_MSG_SIMPLE_LOGIN_CAUTION"|wiz_constant}></span>
</div>
<br />

<form action="<{$xoops_url}>/user.php" method="post" style="margin-top: 0px;">
  <{$smarty.const._MB_USER_USERNAME}><br />
  <input name="uname" id="<{$smarty.const.XOOPS_INPUT_DEFID_PREFIX}>_uname" type="text" size="12" maxlength="255" <{wizin_inputmode mode="alpha"}> /><br />
  <{$smarty.const._MB_USER_PASSWORD}><br />
  <input name="pass" id="<{$smarty.const.XOOPS_INPUT_DEFID_PREFIX}>_pass" type="password"  size="12" maxlength="32" <{wizin_inputmode mode="alpha"}> /><br/>
  <{xoops_input type=hidden name=op value=login id="`$smarty.const.XOOPS_INPUT_DEFID_PREFIX`_op"}>
  <{xoops_input type=submit name=submit value=$smarty.const._MB_USER_LOGIN id="`$smarty.const.XOOPS_INPUT_DEFID_PREFIX`_submit"}>
</form>
<a href="<{$xoops_url}>/lostpass.php"><{$smarty.const._MB_USER_LOSTPASS}></a>
<br /><br />

<{if $wizmobile_userModuleConfig.allow_register == '1'}>
  <a href="<{$xoops_url}>/register.php"><{$smarty.const._MB_USER_USERREG}></a>
<{/if}>

以上、XOOPS Cube でメールアドレス・ログインを実現する実践編でした。

2011年4月21日木曜日

weblinks モジュールのソート条件について

今日のお題は、XOOPS Cube の weblinks モジュールについてです。

viewcat.php でカテゴリー内のリスト一覧が表示されますが、このリストの並び替えに地域を付け加えようという主旨です。

ページナビゲーションに地域(市区分と住所)での並び替えを加えると、単純に「カンマ区切りで昇順ね」とお願いしても無視されます。orz

class/weblinks_pagenavi_menu.php
function weblinks_pagenavi_menu()
{
    $this->happy_linux_pagenavi();

    $this->add_sort(_WLS_ADDRESSATOZ, 'city,addr',        'ASC');
    $this->add_sort(_WLS_ADDRESSZTOA, 'city,addr',        'DESC');
・・・以下略

で掘り出したコードはこちら。カンマ区切りが有れば$sort_arrの配列に律儀に項目をスタックして行きます。これでカンマ区切りで複数項目を並び替え指定できる様になりました。コメントアウトしている箇所が元ソースでその下のif文が追加となります。

class/weblinks_cat_view_handler.php
function &get_lid_array_by_cid_sort($cid, $sort, $limit=0, $start=0)
{
    $sort_arr = array();

    if ( $this->_conf['recommend_pri'] == 2 ){
        $sort_arr[] = 'recommend DESC';
    }

    if ( $this->_conf['mutual_pri'] == 2 ){
        $sort_arr[] = 'mutual DESC';
    }
    if ( isset($sort['sort']) && isset($sort['order']) ){
        //$sort_arr[] = $sort['sort'].' '.$sort['order'];
        if ( strpos($sort['sort'],",") === false ){
            $sort_arr[] = $sort['sort'].' '.$sort['order'];
        }else{
            $sortnames = explode(",",$sort['sort']);
            foreach ($sortnames as $s){
                $sort_arr[] = $s.' '.$sort['order'];
            }
        }
    }else{
        $sort_arr[] = 'lid ASC';
    }
    $orderby = implode(',', $sort_arr);
    $lid_arr =& $this->_link_catlink_handler->get_lid_array_by_cid_orderby($cid, $orderby, $limit, $start);
    return $lid_arr;
}

2011年4月4日月曜日

BuddyPressのテーマ編集

/wp-content/plugins/buddypress/bp-themes/index.php
 デフォルト・テーマは上記に配置。画像はこの下のフォルダ_incに位置する。
まあ、ここを触れば何とかテーマの体裁は整えられるという事。

2011年4月1日金曜日

XOOPS Cube サニタイズ関数の備忘録

XOOPS Cubeではサニタイズ用の関数が準備されています。文字列の取り扱いの際にはデータ取得元によって以下の処理を行う事により脆弱性のリスクを回避する事ができます。


【文字列型(テキストエリア以外)
・$_GET/$_POSTの通常表示・・・$myts->stripSlashesGPC 後 $myts->htmlSpecialChars
$_GET/$_POSTのフォーム内表示・・・$myts->stripSlashesGPC $myts->htmlSpecialChars
DB取得データの通常表示・・・$myts->htmlSpecialChars
DB取得データのフォーム内表示・・・$myts->htmlSpecialChars

【文字列型(テキストエリア)
$_GET/$_POSTの通常表示・・・$myts->previewTarea
$_GET/$_POSTのテキストエリア内表示・・・$myts->stripSlashesGPC $myts->htmlSpecialChars
DB取得データの通常表示・・・$myts->displayTarea
DB取得データのテキストエリア内表示・・・$myts->htmlSpecialChars