Автор Тема: Блокировка лички для групп  (Прочитано 481 раз)

kak2z

  • Administrator
  • Full Member
  • *****
  • Сообщений: 115
    • Просмотр профиля
Блокировка лички для групп
« : 24 Июль 2017, 22:00 »
1. Файл functions.php
1.1. Добавить в конец

// myFix start allow send PM
/*
* $g_from - ID группы пользователя который отправляет сообщения
* $g_to - ID группы пользователя которому отсылаем сообщение
*/
function allowSendPm($g_from, $g_to){
/*
4 группа не может писать 5 и 6
5 группа не может писать 4 и 6
6 группа не может писать 4 и 5

Значит 4, 5, 6 группа видет ссылку ЛС только у 1,2,7,8,9 группы (то есть тем кому может отправить сообщение)

1,2,7,8,9 видет сылку ЛС у всех
1,2 (админы) видят ссылку ЛС И EMAIL у всех!

и при просмотре тем (viewtopic.php) слева под каждым юзером есть ссылка E-Mail и ЛС
*/

$not_allowed = [
0 => [],
1 => [],
2 => [],
3 => [],
4 => [5,6],
5 => [4,6],
6 => [4,5],
7 => [],
8 => [],
9 => [],
];

$res = ( isset($not_allowed[$g_from]) && in_array($g_to, $not_allowed[$g_from]) );

return $res;

}

function getUserData($id){
global $db;

// Check if there's a user matching $user and $password
$result = $db->query('SELECT * FROM '.$db->prefix.'users AS u WHERE u.id='.intval($id).'') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
$user = $db->fetch_assoc($result);

return $user;

}
function getUserDataByName($name){
global $db;

$result = $db->query('SELECT * FROM '.$db->prefix.'users AS u WHERE u.username=\''.$db->escape($name).'\'') or error('Unable to fetch user information', __FILE__, __LINE__, $db->error());
$user = $db->fetch_assoc($result);

return $user;

}
// myFix end allow send PM


2. Файл pmsnew.php
2.1 Найти
$pmsn_modul = pmsn_get_var('mdl', 'new');
добавить ПЕРЕД
// myFix start allow send PM
if(!empty($_POST['req_addressee'])){
$g_to = getUserDataByName($_POST['req_addressee']);
if(allowSendPm($pun_user['group_id'], $g_to['group_id'])){
message($lang_common['No permission'], false, '403 Forbidden');
}
}
elseif(!empty($_GET['uid'])){
$g_to = getUserData((int)$_GET['uid']);
if(allowSendPm($pun_user['group_id'], $g_to['group_id'])){
message($lang_common['No permission'], false, '403 Forbidden');
}
} elseif(!empty($_GET['pid']) || !empty($_GET['tid'])) {
$tid = isset($_GET['tid']) ? intval($_GET['tid']) : 0;
$pid = isset($_GET['pid']) ? intval($_GET['pid']) : 0;
if ($tid < 1 && $pid < 1){
message($lang_common['Bad request'], false, '404 Not Found');
}

if ($pid)
{
$result = $db->query('SELECT topic_id FROM '.$db->prefix.'pms_new_posts WHERE id='.$pid) or error('Unable to fetch pms_new_posts info', __FILE__, __LINE__, $db->error());
if (!$db->num_rows($result))
message($lang_common['Bad request'], false, '404 Not Found');

$tid = $db->result($result);
}

$result = $db->query('SELECT t.*, u.num_posts, u.id AS userid, u.group_id FROM '.$db->prefix.'pms_new_topics AS t LEFT JOIN '.$db->prefix.'users AS u ON (u.id!='.$pun_user['id'].' AND (u.id=t.starter_id OR u.id=t.to_id)) WHERE t.id='.$tid) or error('Unable to fetch pms_new_topics info', __FILE__, __LINE__, $db->error());

if (!$db->num_rows($result))
message($lang_common['Bad request'], false, '404 Not Found');

$cur_topic = $db->fetch_assoc($result);
$to_user = array();

if ($cur_topic['starter_id'] == $pun_user['id'])
{
$to_user['id'] = $cur_topic['to_id'];
$to_user['username'] = $cur_topic['to_user'];
$to_user['group_id'] = $cur_topic['group_id'];

if ($cur_topic['topic_st'] < 2)
{
$query_end = 'see_st='.time();
$query_end2 = ', topic_st=0';
$status = true;
}
else
$status = false;
}
else
{
$to_user['id'] = $cur_topic['starter_id'];
$to_user['username'] = $cur_topic['starter'];
$to_user['group_id'] = $cur_topic['group_id'];
}

if(allowSendPm($pun_user['group_id'], $to_user['group_id'])){
message($lang_common['No permission'], false, '403 Forbidden');
}
}
// myFix end allow send PM
« Последнее редактирование: 24 Июль 2017, 23:19 от kak2z »

kak2z

  • Administrator
  • Full Member
  • *****
  • Сообщений: 115
    • Просмотр профиля
Re: Блокировка лички для групп
« Ответ #1 : 25 Июль 2017, 19:23 »
Для почты права

3. Файл viewtopic.php
3.1.
Найти
else if ($cur_post['email_setting'] == '1' && !$pun_user['is_guest'] && $pun_user['g_send_email'] == '1')
заменить на
// myFix start allow send PM
else if ($cur_post['email_setting'] == '1' && !$pun_user['is_guest'] && $pun_user['g_send_email'] == '1' && allowSendEmal($pun_user['group_id']))
// myFix end allow send PM


3.2. Найти
if (!$pun_user['is_guest'] && $pun_config['o_pms_enabled'] == '1' && $pun_user['g_pm'] == 1 && $pun_user['messages_enable'] == 1 && $cur_post['poster_id'] != $pun_user['id'])

заменить на
// myFix start allow send PM
if (!$pun_user['is_guest'] && $pun_config['o_pms_enabled'] == '1' && $pun_user['g_pm'] == 1 && $pun_user['messages_enable'] == 1 && $cur_post['poster_id'] != $pun_user['id'] && !allowSendPm($pun_user['group_id'], $cur_post['group_id']))
// myFix end allow send PM


3.3. Найти

В этом месте будьте внимательны.. мы вносим изменения в тот код который мы уже вносили изменения когда ставили мод лички

$result = $db->query('SELECT u.email, u.title, u.url, u.location, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, u.messages_enable, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, g.g_pm, g.g_promote_next_group, o.user_id AS is_online FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'users AS u ON u.id=p.poster_id INNER JOIN '.$db->prefix.'groups AS g ON g.g_id=u.group_id LEFT JOIN '.$db->prefix.'online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.id IN ('.implode(',', $post_ids).') ORDER BY p.id', true) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());

заменить на
// add ", u.group_id" - allow send PM
$result = $db->query('SELECT u.email, u.title, u.url, u.location, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, u.messages_enable, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, g.g_pm, g.g_promote_next_group, o.user_id AS is_online, u.group_id FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'users AS u ON u.id=p.poster_id INNER JOIN '.$db->prefix.'groups AS g ON g.g_id=u.group_id LEFT JOIN '.$db->prefix.'online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.id IN ('.implode(',', $post_ids).') ORDER BY p.id', true) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());


kak2z

  • Administrator
  • Full Member
  • *****
  • Сообщений: 115
    • Просмотр профиля
Re: Блокировка лички для групп
« Ответ #2 : 25 Июль 2017, 19:25 »
4. Файл functions.php

4.1. Найти
function getUserData($id){
вставить ПЕРЕД ним
function allowSendEmal($group_id){
$allow = [1, 2];
$res = in_array($group_id, $allow);
var_dump($res);
return $res;
}



kak2z

  • Administrator
  • Full Member
  • *****
  • Сообщений: 115
    • Просмотр профиля
Re: Блокировка лички для групп
« Ответ #3 : 25 Июль 2017, 19:27 »
5. Файл profile.php

5.1. Найти
// if ($email_field != '')

заменить на
// myFix start allow send PM
if ($email_field != '' && allowSendEmal($pun_user['group_id']))
// myFix end allow send PM



kak2z

  • Administrator
  • Full Member
  • *****
  • Сообщений: 115
    • Просмотр профиля
Re: Блокировка лички для групп
« Ответ #4 : 25 Июль 2017, 19:28 »
6. Файл misc.php

6.1. Найти
if ($pun_user['is_guest'] || $pun_user['g_send_email'] == '0')
message($lang_common['No permission'], false, '403 Forbidden');

заменить на
// myFix start allow send PM
if ($pun_user['is_guest'] || $pun_user['g_send_email'] == '0' || !allowSendEmal($pun_user['group_id']))
message($lang_common['No permission'], false, '403 Forbidden');
// myFix end allow send PM