ちょっと邪道な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に書き足しました。
PRE class User_UserAdminEditCustomForm extends User_UserAdminEditForm
{
} /PRE
この作成したActionFormを使うように、UserEditCustomアクションを修正します。
class User_UserEditCustomAction extends User_UserEditAction
{
function _setupActionForm()
{
$this->mActionForm =& new User_UserAdminEditCustomForm();
$this->mActionForm->prepare();
}
} /PRE
これで改造の下準備ができました。
では、メールアドレスの必須チェックを外します。
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);
}
}
?>