Автор Тема: Владельцы раздела  (Прочитано 514 раз)

kak2z

  • Administrator
  • Full Member
  • *****
  • Сообщений: 115
    • Просмотр профиля
Владельцы раздела
« : 24 Июль 2017, 15:37 »
mysql
ALTER TABLE `flux_forums` ADD `owners_id` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `parent_forum_id`;
« Последнее редактирование: 24 Июль 2017, 15:42 от kak2z »

kak2z

  • Administrator
  • Full Member
  • *****
  • Сообщений: 115
    • Просмотр профиля
Re: Владельцы раздела
« Ответ #1 : 24 Июль 2017, 17:42 »
1. Файл admin_forums.php

1.1. найти
$forum_name = pun_trim($_POST['forum_name']);
вставить после
//myFix start board owner
$owners_id = pun_trim($_POST['owners_id']);
//myFix end board owner

1.2. найти
$db->query('UPDATE '.$db->prefix.'forums SET forum_name=\''.$db->escape($forum_name).'\', forum_desc='.$forum_desc.', redirect_url='.$redirect_url.', sort_by='.$sort_by.', cat_id='.$cat_id.' WHERE id='.$forum_id) or error('Unable to update forum', __FILE__, __LINE__, $db->error());
заменить на
//myFix start board owner
$db->query('UPDATE '.$db->prefix.'forums SET forum_name=\''.$db->escape($forum_name).'\', forum_desc='.$forum_desc.', redirect_url='.$redirect_url.', sort_by='.$sort_by.', cat_id='.$cat_id.', owners_id=\''.$db->escape($owners_id).'\' WHERE id='.$forum_id) or error('Unable to update forum', __FILE__, __LINE__, $db->error());
//myFix end board owner


1.3. найти
<tr>
<th scope="row"><?php echo $lang_admin_forums['Forum name label'?></th>
<td><input type="text" name="forum_name" size="35" maxlength="80" value="<?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?>" tabindex="1" /></td>
</tr>
вставить после
<!-- myFix start board owner -->
<tr>
<th scope="row">Владельцы раздела (ID пользователей через запятую "1,65,34")</th>
<td><input type="text" name="owners_id" size="35" maxlength="80" value="<?php echo $cur_forum['owners_id'?>" tabindex="1" /></td>
</tr>
<!-- myFix end board owner -->



kak2z

  • Administrator
  • Full Member
  • *****
  • Сообщений: 115
    • Просмотр профиля
Re: Владельцы раздела
« Ответ #2 : 24 Июль 2017, 17:44 »
2. Файл /viewforum.php

2.1. Найти
// Fetch some info about the forum
if (!$pun_user['is_guest'])
$result = $db->query('SELECT f.forum_name, f.redirect_url, f.moderators, f.num_topics, f.sort_by, fp.post_topics, s.user_id AS is_subscribed FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_subscriptions AS s ON (f.id=s.forum_id AND s.user_id='.$pun_user['id'].') LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
else
$result = $db->query('SELECT f.forum_name, f.redirect_url, f.moderators, f.num_topics, f.sort_by, fp.post_topics, 0 AS is_subscribed FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());

заменить на
// myFix start board owner
// Fetch some info about the forum
if (!$pun_user['is_guest'])
$result = $db->query('SELECT f.forum_name, f.redirect_url, f.moderators, f.num_topics, f.sort_by, fp.post_topics, s.user_id AS is_subscribed, f.owners_id FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_subscriptions AS s ON (f.id=s.forum_id AND s.user_id='.$pun_user['id'].') LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
else
$result = $db->query('SELECT f.forum_name, f.redirect_url, f.moderators, f.num_topics, f.sort_by, fp.post_topics, 0 AS is_subscribed, f.owners_id FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
//myFix end board owner


2.2. Найти
if (($cur_forum['post_topics'] == '' && $pun_user['g_post_topics'] == '1') || $cur_forum['post_topics'] == '1' || $is_admmod)
заменить на
// myFix start board owner
if (($cur_forum['post_topics'] == '' && $pun_user['g_post_topics'] == '1' && isOwnerForum($pun_user['is_guest'], $pun_user['id'], $cur_forum['owners_id'])) || $cur_forum['post_topics'] == '1' || $is_admmod)
// myFix end board owner

kak2z

  • Administrator
  • Full Member
  • *****
  • Сообщений: 115
    • Просмотр профиля
Re: Владельцы раздела
« Ответ #3 : 24 Июль 2017, 17:45 »
3. Файл /include/functions.php

3.1. Добавить в конец
// myFix start board owner
/**
* $is_guest - значение из $pun_user['is_guest'] - переданное как аргумент
* $user_id - id пользователя взято из $pun_user['id']
* $owners_id - список пользователей которые могут создавать топики в этом разделе (1,2,3)
*/
function isOwnerForum($is_guest, $user_id, $owners_id){
if( empty($owners_id) ){
// Если нет пользователей в списке то всегда разрешено создавать
return true;
} elseif( $is_guest ) {
// Или если пользователь гость (надо для того вдруг
// если откроете доступ для создания топиков гостям).
return true;
} else {
//Если в массиве есть id пользователя тогда true иначе false
return in_array($user_id, explode(',', $owners_id));
}
}
// myFix end board owner


kak2z

  • Administrator
  • Full Member
  • *****
  • Сообщений: 115
    • Просмотр профиля
Re: Владельцы раздела
« Ответ #4 : 24 Июль 2017, 17:46 »
4. Файл post.php

4.1. Найти
($fid && (($cur_posting['post_topics'] == '' && $pun_user['g_post_topics'] == '0') || $cur_posting['post_topics'] == '0')) ||
заменить на
// myFix start board owner
($fid && (($cur_posting['post_topics'] == '' && $pun_user['g_post_topics'] == '0') || $cur_posting['post_topics'] == '0' || !isOwnerForum($pun_user['is_guest'], $pun_user['id'], $cur_posting['owners_id']))) ||
// myFix start board owner

kak2z

  • Administrator
  • Full Member
  • *****
  • Сообщений: 115
    • Просмотр профиля
Re: Владельцы раздела
« Ответ #5 : 24 Июль 2017, 20:25 »
дополнительная правка

файл /include/functions.php

найти
// myFix start board owner
/**
* $is_guest - значение из $pun_user['is_guest'] - переданное как аргумент
* $user_id - id пользователя взято из $pun_user['id']
* $owners_id - список пользователей которые могут создавать топики в этом разделе (1,2,3)
*/
function isOwnerForum($is_guest, $user_id, $owners_id){
if( empty($owners_id) ){
// Если нет пользователей в списке то всегда разрешено создавать
return true;
} elseif( $is_guest ) {
// Или если пользователь гость (надо для того вдруг
// если откроете доступ для создания топиков гостям).
return true;
} else {
//Если в массиве есть id пользователя тогда true иначе false
return in_array($user_id, explode(',', $owners_id));
}
}
// myFix end board owner

заменить на
// myFix start board owner
/**
* $is_guest - значение из $pun_user['is_guest'] - переданное как аргумент
* $user_id - id пользователя взято из $pun_user['id']
* $owners_id - список пользователей которые могут создавать топики в этом разделе (1,2,3)
*/
function isOwnerForum($is_guest, $user_id, $owners_id){
$res = false;
if( empty($owners_id) ){
// Если нет пользователей в списке то всегда разрешено создавать
$res = true;
} elseif( $is_guest ) {
// Или если пользователь гость (надо для того вдруг
// если откроете доступ для создания топиков гостям).
$res = false;
} else {
//Если в массиве есть id пользователя тогда true иначе false
$res = in_array($user_id, explode(',', $owners_id));
}
return $res;
}
// myFix end board owner
« Последнее редактирование: 24 Июль 2017, 20:31 от kak2z »

kak2z

  • Administrator
  • Full Member
  • *****
  • Сообщений: 115
    • Просмотр профиля
Re: Владельцы раздела
« Ответ #6 : 24 Июль 2017, 20:38 »
файл Post.php

найти
$result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, t.subject, t.closed, s.user_id AS is_subscribed FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') LEFT JOIN '.$db->prefix.'topic_subscriptions AS s ON (t.id=s.topic_id AND s.user_id='.$pun_user['id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.$tid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
заменить на
// myFix start board owner
$result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, t.subject, t.closed, s.user_id AS is_subscribed, f.owners_id FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') LEFT JOIN '.$db->prefix.'topic_subscriptions AS s ON (t.id=s.topic_id AND s.user_id='.$pun_user['id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.$tid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
// myFix start board owner




дальше найти
$result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$fid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
заменить на
// myFix start board owner
$result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, f.owners_id FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$fid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
// myFix start board owner

kak2z

  • Administrator
  • Full Member
  • *****
  • Сообщений: 115
    • Просмотр профиля
Re: Владельцы раздела
« Ответ #7 : 24 Июль 2017, 20:39 »
найти
// myFix start board owner
/**
* $is_guest - значение из $pun_user['is_guest'] - переданное как аргумент
* $user_id - id пользователя взято из $pun_user['id']
* $owners_id - список пользователей которые могут создавать топики в этом разделе (1,2,3)
*/
function isOwnerForum($is_guest, $user_id, $owners_id){
$res = false;
if( empty($owners_id) ){
// Если нет пользователей в списке то всегда разрешено создавать
$res = true;
} elseif( $is_guest ) {
// Или если пользователь гость (надо для того вдруг
// если откроете доступ для создания топиков гостям).
$res = true;
} else {
//Если в массиве есть id пользователя тогда true иначе false
$res = in_array($user_id, explode(',', $owners_id));
}
return $res;
}
// myFix end board owner


заменить на
// myFix start board owner
/**
* $is_guest - значение из $pun_user['is_guest'] - переданное как аргумент
* $user_id - id пользователя взято из $pun_user['id']
* $owners_id - список пользователей которые могут создавать топики в этом разделе (1,2,3)
*/
function isOwnerForum($is_guest, $user_id, $owners_id){
$res = false;
if( empty($owners_id) ){
// Если нет пользователей в списке то всегда разрешено создавать
$res = true;
} elseif( $is_guest ) {
// Или если пользователь гость (надо для того вдруг
// если откроете доступ для создания топиков гостям).
$res = false;
} else {
//Если в массиве есть id пользователя тогда true иначе false
$res = in_array($user_id, explode(',', $owners_id));
}
return $res;
}
// myFix end board owner