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

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



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

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

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

добавляем новую функцию со строки 620
  1.  
  2. // ============================================================================ //
  3.  
  4. /**
  5.   * Возвращает массив списка пользователей
  6.   * @return Array
  7.   */
  8. public static function getUsers(){
  9.  
  10. $inDB = cmsDatabase::getInstance();
  11.  
  12. $usrlist = '';
  13.  
  14. $sql = "SELECT id, nickname FROM cms_users WHERE is_locked = 0 AND is_deleted = 0 ORDER BY nickname";
  15.  
  16. $rs = $inDB->query($sql);
  17.  
  18. if (!$inDB->num_rows($rs)){ return; }
  19.  
  20. while($u = $inDB->fetch_assoc($rs)){
  21. $usrlist[] = $u;
  22. }
  23.  
  24. return $usrlist;
  25.  
  26. }
  27.  
  28. // ============================================================================ //
  29.  
пробуем, радуемся!

Забыл сказать, движок сайта версия 1.8, другие не проверял.
Также соотвественно при обновлении движка сайта — нужно проделать эти операции заново.
0
fact fact 12 лет назад #
Замечательно!
в закрытом клубе была ссылка на отправку сообщения админу клуба - но это совсем просто сделать) -

-вот с этого места поподробнее пожалуйста! Очень очень нужно!
0
EVV EVV 12 лет назад #
На 1.7 тоже все прекрасно работает!
Можно ли сделать, чтобы выбирались сразу несколько пользователей?
+2
Слава Слава 12 лет назад #
Я тоже думал над этим. Но возник вопрос. А если пользователей 20-30 тысяч. Какой длинны список получится?
0
Крот Крот 12 лет назад #
согласен. думаю ajax поиск нужен
+1
Крот Крот 12 лет назад #
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>
пробуем, и опять радуемся!

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

Вот здесь:

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

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

вообщем надо еще в том же файле найти
Код 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>';
			}		
		}
забыл убрать проверку(
проверьте пжл.
+1
sepraga sepraga 12 лет назад #
Все ОК!!!!
Спасибо. smile
0
Thanatognozija Thanatognozija 12 лет назад #
Скажите пожалуйста, может быть кто-то знает, можно ли сделать так, чтобы закрытый клуб могли просматривать не члены клуба, но не могли там ничего оставлять, блог, комментарии? Как можно такое сделать?
+2
sepraga sepraga 10 лет назад #
Есть ли у кого либо решение для 1.10.3 ?
+1
Викторыч Викторыч 9 лет назад #
Проблема актуальна по-прежнему! Требуется решение для версии 1.10.3, причем даже не для закрытого клуба, а для обычного. Сейчас создал Клуб от администратора, все остальные заходят на страницу Клуба, а кнопки "Вступить в клуб" не видят. Чтобы вступить в него, пользователю надо оформиться "в друзья", сами понимаете, какой геморрой будет, если количество "друзей" перевалит, скажем, за несколько сотен. По этой же причине не могу сделать массовое приглашение в Клуб, ибо в списке пользователей только несколько "друзей". Пока что получается, что обычный Клуб с доступом "Для всех" недоступен по умолчанию.
И можно ли сделать так, чтобы человек после регистрации сразу становился членом определенного Клуба, чтобы не морочиться со вступлением потом?
0
Крот Крот 9 лет назад #
Делалось от нечего делать в 2011 году но, проблема еще актуальна)
проще клубы написать по новой
0
Викторыч Викторыч 9 лет назад #
Да и мне проще, конечно, обратно в Блоги все запихать, чем с Клубами мучаться. ) Крот, если возьметесь, в личку отпишите, плз. Надо - свободное вступление в открытый Клуб, а не по приглашению от "друзей", возможность массового приглашения в свободный клуб всех зарегистрированных...
0
Шадринец Шадринец 8 лет назад #
Вот прошло столько времени а проблема не решилась,в новых версиях все тот же Вопрос. Неужели не кто не делал доработку закрытых клубов для новых Версий? Очень печально, если нет., Столько Умных людей и всем некогда это сделать.?

Еще от автора

Инвайтер 1.9 для 1.10.6
Доброго всем времени суток! Решил нарушить сложившуюся здесь традицию и решил вернуться сюда с обновлениями.
Инстант "по взрослому". Часть 2. Авторизация. Аякс. v1.10
Доброго всем времени суток! Продолжая серию Инстант "по взрослому", сегодня хотел бы показать более мощный плагин авторизации.
Инстант "по взрослому". Часть 1. Авторизация. Счетчик неверных входов. v1.10
Доброго всем дня! Продолжим наши уроки по усовершенствованию Инстанта. Сегодня мы будем изучать и усовершенствовать первую ветку Инстанта.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.