ちょっと邪道なuserモジュール改造
XOOPS Cubeのユーザ管理画面でユーザ登録するときに、メールアドレスの必須チェックを外したかったので、少々邪道な方法でやってみました。
まず、ユーザ登録画面のアクションを継承して、UserEditCustomアクションを作成します。
/modules/user/admin/actions/UserEditCustomAction.class.php
<?php
if (!defined('XOOPS_ROOT_PATH')) exit();
require_once XOOPS_MODULE_PATH .'/user/admin/actions/UserEditAction.class.php';
class User_UserEditCustomAction extends User_UserEditAction
{
}
?>
この状態で、
XOOPS_URL/modules/user/admin/index.php?action=UserEditCustom
にアクセスすると、XOOPS Cubeのユーザ追加画面と同じ画面が表示されます。
メールアドレスのチェックなど、入力項目のチェックは、ActionFormで行われているので、こちらも継承したActionFormを作成します。
今回は、別ファイルにするのも面倒だったので、先ほどのUserEditCustomAction.class.phpに書き足しました。
class User_UserAdminEditCustomForm extends User_UserAdminEditForm
{
}
この作成したActionFormを使うように、UserEditCustomアクションを修正します。
class User_UserEditCustomAction extends User_UserEditAction
{
function _setupActionForm()
{
$this->mActionForm =& new User_UserAdminEditCustomForm();
$this->mActionForm->prepare();
}
}
これで改造の下準備ができました。
では、メールアドレスの必須チェックを外します。
ActionFormのprepareでvalidatorを登録しているので、prepareでメールアドレスの必須チェックをしている箇所だけ修正します。
class User_UserAdminEditCustomForm extends User_UserAdminEditForm
{
function prepare()
{
parent::prepare();
// emailの必須チェック外した
unset($this->mFieldProperties['email']);
$this->mFieldProperties['email'] =& new XCube_FieldProperty($this);
$this->mFieldProperties['email']->setDependsByArray(array( 'maxlength', 'email'));
$this->mFieldProperties['email']->addMessage('maxlength', _MD_USER_ERROR_MAXLENGTH, _MD_USER_LANG_EMAIL, '60');
$this->mFieldProperties['email']->addVar('maxlength', 60);
$this->mFieldProperties['email']->addMessage('email', _MD_USER_ERROR_EMAIL, _MD_USER_LANG_EMAIL);
}
}
親クラスで設定されてる$this->mFieldProperties[’email’]をunsetして、設定しなおすという強引なやり方です(^^;
というわけで、最終的な UserEditCustomAction.class.php は、下記のコードになりました。
<?php
if (!defined('XOOPS_ROOT_PATH')) exit();
require_once XOOPS_MODULE_PATH .'/user/admin/actions/UserEditAction.class.php';
class User_UserEditCustomAction extends User_UserEditAction
{
function _setupActionForm()
{
$this->mActionForm =& new User_UserAdminEditCustomForm();
$this->mActionForm->prepare();
}
}
class User_UserAdminEditCustomForm extends User_UserAdminEditForm
{
function prepare()
{
parent::prepare();
// emailの必須チェック外した
unset($this->mFieldProperties['email']);
$this->mFieldProperties['email'] =& new XCube_FieldProperty($this);
$this->mFieldProperties['email']->setDependsByArray(array( 'maxlength', 'email'));
$this->mFieldProperties['email']->addMessage('maxlength', _MD_USER_ERROR_MAXLENGTH, _MD_USER_LANG_EMAIL, '60');
$this->mFieldProperties['email']->addVar('maxlength', 60);
$this->mFieldProperties['email']->addMessage('email', _MD_USER_ERROR_EMAIL, _MD_USER_LANG_EMAIL);
}
}
?>
あとは、mod_rewriteで
XOOPS_URL/modules/user/admin/index.php?action=UserEdit へのアクセスを
XOOPS_URL/modules/user/admin/index.php?action=UserEditCustom へリダイレクトさせればOKです。
今回は、実験的にpreloadファイルつくってみました(^^;
/modules/user/admin/preload/RedirectAdminUserEdit2AdminUserEditCustom.class.php
<?php
class User_RedirectAdminUserEdit2AdminUserEditCustom extends XCube_ActionFilter
{
function postFilter()
{
if(is_object($this->mRoot->mContext->mXoopsModule)){
if($this->mRoot->mContext->mXoopsModule->get('dirname') == 'user'){
$action = xoops_getrequest('action');
if($action=='UserEdit'){
$url= 'index.php?action=UserEditCustom';
$uid = intval(xoops_getrequest('uid'));
if($uid){
$url .='&uid='.$uid;
}
$this->mController->executeForward($url);
}
}
}
}
}
?>
かなり邪道なやり方だとは思いますが、XOOPS Cubeだと、配布ファイルを編集せず、かつ自前のコードは最小限にして、こういうこともできるというところが、気に入っています。
RSS feed for comments on this post.
ƤˤϡޤȤդƤޤ
Ȥ
ʤߥȤդ뤳ȤϽޤ