По умолчанию Joomla позволяет два способа активации учетной записи: автоматически и посредством перехода по ссылке в письме, отправляемом на e-mail зарегистрированного пользователя.
Однако, иногда требуется, с одной стороны не запрещать регистрацию пользователей на сайте, а с другой стороны нужно утверждение учетных записей администратором. При этом, чтобы зарегистрированный пользователь мог зайти на сайт только после активации учетной записи администратором, а не сразу после регистрации.
Для этого немного модифицируем компонент регистрации пользователей. Открываем файл
/components/com_registration/registration.php, находим в нем следующую строку:
$row->gid
= $acl->get_group_id( 'Registered', 'ARO' );и добавляем сразу же после нее:
$row->block = '1';Эта строчка сделает всех зарегистрированных пользователей заблокированными. Т.е. они не смогут авторизоваться на сайте до тех пор, пока администратор в административной панели не снимет флаг блокировки с пользователя.
Однако, если на сайте будет включена функция активации по e-mail, блокировка будет сниматься автоматически. Нам же это не нужно, поэтому, мы находим в этом же файле строку:
. "\n SET block = 0, activation = ''"и заменяем ее на:
. "\n SET activation = ''"Т.е. ключ активации будет сбрасываться, а блокировка - нет. Таким образом с одной строны пользователю при регистрации все-таки нужен будет рабочий e-mail адрес, а с другой стороны автоматчиески он не разблокируется. Единственное что требуется, это в тексте письма об активации (константа _USEND_MSG_ACTIVATE в языковом файле, расположенном в папке /languages) надо добавить пару строк о том, что после активации необходимо дождаться утверждения учетной записи администратором.
В принципе, можно еще добавить отправку пользователю письма об утверждении учетной записи. Для этого необходимо открыть файл
/administrator/components/com_user/admin.users.php, найти в нем строчки:
// if action is to block a user
if ( $block == 1 ) {
foreach( $cid as $id ) {
// delete user acounts active sessions
logoutUser( $id, 'com_users', 'block' );
}
}и заменить на следующие:
// if action is to block a user
if ( $block == 1 ) {
foreach( $cid as $id ) {
// delete user acounts active sessions
logoutUser( $id, 'com_users', 'block' );
}
} else {
global $mosConfig_mailfrom, $mosConfig_fromname;
$database->setQuery( "SELECT email FROM #__users WHERE ( $cids )" );
$users = $database->loadObjectList();
$subj = 'Account is approved';
$msg = 'Congratulations, your account is approved!';
foreach( $users as $u ) {
mosMail($mosConfig_mailfrom, $mosConfig_fromname, $u->email, $subj, $msg);
}
}