Хак: Приглашение в закрытый клуб(группу) любого пользователя

3759
Понадобилось мне как-то сделать так, чтобы владелец закрытого клуба мог пригласить в клуб любого пользователя, без добавления его в друзья
(тут еще один момент есть - удобнее будет сделать еще так, чтобы в закрытом клубе была ссылка на отправку сообщения админу клуба - но это совсем просто сделать)



открываем
\www\components\clubs\frontend.php

со строки 612 делаем так
-------------------------------------------------------------------
так было
Код PHP:
	if ( !$inCore->inRequest('join') ){
		// Получаем список друзей
	        $friends     	= cmsUser::getFriends($user_id);
так стало
Код PHP:
	if ( !$inCore->inRequest('join') ){
		// Получаем список друзей
		$friends     	= cmsUser::getUsers(); // это наша новая функция
-------------------------------------------------------------------
в строке 625 убираем !$_SESSION['user']['friends'] || - даем доступ для приглашения
пользователей в группу даже если нет друзей

Код PHP:
		// Если нет друзей или все друзья уже в этом клубе, то выводим ошибку и возвращаемся назад
// так было	if (!$_SESSION['user']['friends'] || !$friends) { $inCore->addSessionMessage($_LANG['SEND_INVITE_ERROR'], 'error'); $inCore->redirect($back); }
так стало
Код PHP:
                // Если нет друзей или все друзья уже в этом клубе, то выводим ошибку и возвращаемся назад
		if (!$friends) { $inCore->addSessionMessage($_LANG['SEND_INVITE_ERROR'], 'error'); $inCore->redirect($back); }
Теперь находим файл
\www\core\classes\usrclass.php

добавляем новую функцию со строки 620
Код PHP:
// ============================================================================ //

    /**
     * Возвращает массив списка пользователей
     * @return Array
     */
    public static function getUsers(){

        $inDB   = cmsDatabase::getInstance();

        $usrlist   = '';

        $sql    = "SELECT id, nickname FROM cms_users WHERE is_locked = 0 AND is_deleted = 0 ORDER BY nickname";

        $rs     = $inDB->query($sql);

        if (!$inDB->num_rows($rs)){ return; }

        while($u = $inDB->fetch_assoc($rs)){
				$usrlist[] = $u;
        }

        return $usrlist;
        
    }

// ============================================================================ //
пробуем, радуемся!

Забыл сказать, движок сайта версия 1.8, другие не проверял.
Также соотвественно при обновлении движка сайта - нужно проделать эти операции заново.
Баг отображения статьи со ограниченным сроком. Движок 1.8 | Модификация компонента Статьи. Дорожная карта.
Комментарии (16)
fact 8 июня 2011 в 02:53 0
Замечательно!
в закрытом клубе была ссылка на отправку сообщения админу клуба - но это совсем просто сделать) -

-вот с этого места поподробнее пожалуйста! Очень очень нужно!
EVV 8 июня 2011 в 09:19 0
На 1.7 тоже все прекрасно работает!
Можно ли сделать, чтобы выбирались сразу несколько пользователей?
Слава 8 июня 2011 в 10:39 +2
Я тоже думал над этим. Но возник вопрос. А если пользователей 20-30 тысяч. Какой длинны список получится?
Крот 8 июня 2011 в 10:58 0
согласен. думаю ajax поиск нужен
Крот 8 июня 2011 в 12:33 +1
1. Добавляем отправку сообщения владельцу закрытой группы
берем файл шаблона com_clubs_view_club.tpl (лежит либо в вашем шаблоне либо в default)

находим строки
Код PHP:
 
       {else}
            <p>{$LANG.CLUB_PRIVATE}</p>
            <p>{$LANG.CLUB_ADMIN}: {$club.admin}</p>

        {/if}
делаем вот так

Код PHP:
 
       {else}
            <p>{$LANG.CLUB_PRIVATE}</p>
            <p>{$LANG.CLUB_ADMIN}: {$club.admin}</p>

            <p>
            <table>
                <tr>
                  <td><img src="/templates/_default_/images/icons/profile/message.png" border="0"/></td>
                  <td><a href="/users/{$club.admin_id}/sendmessage.html" title="{$LANG.WRITE_MESS_TO_ADM}">{$LANG.WRITE_MESS_TO_ADM}</a></td>
                </tr>
            </table>
            </p>
        {/if}
еще в языковом файле www\languages\ru\components\clubs.php добавляем строку в конец перед ?>

Код PHP:
$_LANG['WRITE_MESS_TO_ADM']             ='Написать сообщение владельцу группы';
можно вообще сделать отправку сообщения владельцу в любом случае, закрыт клуб или нет


2. Делаем отправку сообщения пользователю с закрытым профилем
аналогично в файле com_users_not_allow.tpl

находим
Код PHP:
                            <div class="usr_profile_menu">
                                <table cellpadding="0" cellspacing="6" ><tr>

                                        <tr>
                                            <td><img src="/templates/_default_/images/icons/profile/friends.png" border="0"/></td>
                                            <td><a href="/users/{$usr.id}/friendship.html" title="{$LANG.ADD_TO_FRIEND}">{$LANG.ADD_TO_FRIEND}</a></td>
    
                                        </tr>
                                </table>
и меняем

Код PHP:
                            <div class="usr_profile_menu">
                                <table cellpadding="0" cellspacing="6" ><tr>
							{if !$myprofile}
                                <tr>
                                    <td><img src="/templates/_default_/images/icons/profile/message.png" border="0"/></td>
                                    <td><a href="/users/{$usr.id}/sendmessage.html" title="{$LANG.WRITE_MESS}">{$LANG.WRITE_MESS}</a></td>
                                </tr>
							{/if}

                                        <tr>
                                            <td><img src="/templates/_default_/images/icons/profile/friends.png" border="0"/></td>
                                            <td><a href="/users/{$usr.id}/friendship.html" title="{$LANG.ADD_TO_FRIEND}">{$LANG.ADD_TO_FRIEND}</a></td>
    
                                        </tr>
                                </table>
пробуем, и опять радуемся!

Хотя на самом деле я пока не знаю зачем все это нужно...
sepraga 11 июня 2011 в 14:55 0
Прекрасная, замечательная и нужная вещь! Спасибо огромное.
Только как сделать, чтобы возможность выбора из всего списка пользователей сайта была и в настройках клуба.

Вот здесь:

Крот 15 июня 2011 в 22:57 0
по аналогии
в файле \components\clubs\frontend.php
строка 365
Код PHP:
		// Получаем список друзей владельца клуба
		$friends     	 = cmsUser::getFriends($club['admin_id']);
		// Получаем участников клуба, без учета администратора
меняем на новую функцию, описанную выше в блоге
Код PHP:
		// Получаем список друзей владельца клуба
		$friends     	 = cmsUser::getUsers($club['admin_id']);
		// Получаем участников клуба, без учета администратора

Кстати в результате всех моих изысков нашел еще баг, теперь уже и в клубах. Баг не смертельный - просто некрасивый.
Об этом будет в следующем блоге...
sepraga 19 июня 2011 в 13:10 0
Нет. Не получается.
После смены функции блок "мои друзья" стал пустым ...  :(
Крот 19 июня 2011 в 17:54 0
Когда делал посмотрел только на закладку МОДЕРАТОРЫ...

вообщем надо еще в том же файле найти
Код PHP:
		
// Формируем список option друзей, если они есть
		if ($_SESSION['user']['friends'] && $friends) { 
			foreach($friends as $friend){ 
	$friends_list .= '<option value="'.$friend['id'].'">'.$friend['nickname'].'</option>';
			}		
		}
и сделать
Код PHP:
		
// Формируем список option друзей, если они есть
		if ($friends) { 
			foreach($friends as $friend){ 
	$friends_list .= '<option value="'.$friend['id'].'">'.$friend['nickname'].'</option>';
			}		
		}
забыл убрать проверку(
проверьте пжл.
sepraga 19 июня 2011 в 20:49 +1
Все ОК!!!!
Спасибо. smile
Thanatognozija 28 июня 2011 в 00:05 0
Скажите пожалуйста, может быть кто-то знает, можно ли сделать так, чтобы закрытый клуб могли просматривать не члены клуба, но не могли там ничего оставлять, блог, комментарии? Как можно такое сделать?
sepraga 27 ноября 2013 в 00:15 +2
Есть ли у кого либо решение для 1.10.3 ?
Викторыч 28 июня 2014 в 22:14 +1
Проблема актуальна по-прежнему! Требуется решение для версии 1.10.3, причем даже не для закрытого клуба, а для обычного. Сейчас создал Клуб от администратора, все остальные заходят на страницу Клуба, а кнопки "Вступить в клуб" не видят. Чтобы вступить в него, пользователю надо оформиться "в друзья", сами понимаете, какой геморрой будет, если количество "друзей" перевалит, скажем, за несколько сотен. По этой же причине не могу сделать массовое приглашение в Клуб, ибо в списке пользователей только несколько "друзей". Пока что получается, что обычный Клуб с доступом "Для всех" недоступен по умолчанию.
И можно ли сделать так, чтобы человек после регистрации сразу становился членом определенного Клуба, чтобы не морочиться со вступлением потом?
Крот 29 июня 2014 в 08:09 0
Делалось от нечего делать в 2011 году но, проблема еще актуальна)
проще клубы написать по новой
Викторыч 29 июня 2014 в 10:21 0
Да и мне проще, конечно, обратно в Блоги все запихать, чем с Клубами мучаться. ) Крот, если возьметесь, в личку отпишите, плз. Надо - свободное вступление в открытый Клуб, а не по приглашению от "друзей", возможность массового приглашения в свободный клуб всех зарегистрированных...
Шадринец 24 декабря 2015 в 16:29 0
Вот прошло столько времени а проблема не решилась,в новых версиях все тот же Вопрос. Неужели не кто не делал доработку закрытых клубов для новых Версий? Очень печально, если нет., Столько Умных людей и всем некогда это сделать.?