Перейти к контенту

Назначение куратора для темы


Рекомендуемые сообщения

вот вроде как первая версия

ЧЕГО ДЕЛАЕТ?

Любой теме можно назначить куратора (следящего) котороый может редактировать любые посты и удалять сообщения в своей теме

назначить куратора может модератор в своем форуме, супермодераторы, админы

вообщем вот сама модификация..

 

1. создаем в таблице ibf_topics поле новое

ALTER TABLE `ibf_topics` ADD `curator_id` VARCHAR( 255 ) DEFAULT NULL ;

 

2. идем в скин менегер и там ..

2.1 ACP Home / Skin Manager Home / Topic View/ TableFooter

ищем строчку

<form name="modform" method="post" action="{ipb.script_url}act=mod&CODE=postchoice&f={$data['TOPIC']['forum_id']}&t={$data['TOPIC']['tid']}" onsubmit="return checkdelete();">

и ПЕРЕД ней добавляем

<a href= "javascript:PopUp ('{ipb.script_url}act=mod&CODE=topiccurator&t={$data[TOPIC]['tid']}&f={$data['FORUM']['id']}&auth_key={$auth_key}',  'topiccurator', 450,200)"> Добавить куратора</a>

 

2.2 ACP Home / Skin Manager Home

выбираем Moderator Function и там жмем кнопку Add Template Bit

и в появившемся окне заполняем поля

 

New Template Bit Name

topic_curator_splash

New Template Bit Incoming Data Variables

$forum="", $topic="", $auth_key="", $list_user="", $update=""

большое поле

</script><script language='javascript' type="text/javascript">
<!--
function find_users()
{
 url = "index.php?act=legends&CODE=finduser_one&s=&entry=textarea&name=topic_curator&sep=none";
 window.open(url,'FindUsers','width=400,height=250,resizable=yes,scrollbars=yes'); 
}
//-->
</script>
<div class='borderwrap'>
 <div class='maintitle'>Добавить куратора для  {$topic['title']}</div>
<div class='pformstrip'>{$update}</div>
<div class='tablepad'>Впишите точное имя пользователя или воспользуйтесь поиском</div>
<form action='{ipb.script_url}' method='POST' name='REPLIER' >
 <input type='hidden' name='s' value='{ipb.session_id}'>
 <input type='hidden' name='act' value='mod'>
 <input type='hidden' name='CODE' value='topiccurator'>
 <input type='hidden' name='f' value='{$forum['id']}'>
 <input type='hidden' name='t' value='{$topic['tid']}'>
 <input type='hidden' name='auth_key' value='$auth_key' />
<input type='hidden' name='check' value='1'>

 <div class='pformstrip'>{ipb.lang['excl_acc_title2']}</div>

<table width="100%" cellspacing="0">
<tr>
<td class='pformright' align='center'>
<input type="text" name='topic_curator' size='30' value={$list_user}><br />
<input type='button' class='forminput' name='findusers' onclick='find_users()' value='{ipb.lang['find_user_names']}' />
</td></tr></table>
 <div class='formsubtitle' align='center'><input type='submit' value='{ipb.lang['cp_prune_sub1']}' class='button' /></div>
</form>
</div>

 

3. берем файлик sources/moderate.php

 

3.1 ищем строчку

        $post_array      = array( '04', '02', '20', '22', 'resync', 'prune_start', 'prune_finish', 'prune_move', 'editmember');

 

заменяем на

        $post_array      = array( '04', '02', '20', '22', 'resync', 'prune_start', 'prune_finish', 'prune_move', 'editmember', 'topiccurator');

 

3.2 ищем

         case 'editmember':
          $this->edit_member();
          break;

после добавляем

         case 'topiccurator':
          $this->topic_curator();
          break;

 

3.3 чуть ниже находим

 /*-------------------------------------------------------------------------*/
// Edit member
/*-------------------------------------------------------------------------*/

и ПЕРЕД этим добавляем

function topic_curator()
{
  global $DB, $std, $forums, $ibforums, $print;
 
  //-----------------------------------------------
// Check permissions
  //-----------------------------------------------
 
  if ($ibforums->member['g_is_supmod'] == 1)
  {
    $pass = 1;
  }
   else if ($this->moderator['is_mod'] == 1)
  {
    $pass = 1;
  }
  else
  {
    $pass = 0;
  }
 
  if ($pass == 0)
  {
    $this->moderate_error();
    return;
  }
 
 //-----------------------------------------------
 // Are we checking first?
 //-----------------------------------------------
  $update='';
 
  if ($ibforums->input['check'] == 1)
  {
    $user_list=$ibforums->input['topic_curator'];
    if (isset($user_list) and $user_list != "")
    {
  //---------------------------
  // Sort out the array
  //---------------------------
  
     $user_list = str_replace(  "<br>", "<br />" , trim($user_list) );
     $user_list = str_replace(  "<br /><br />", "<br />" , trim($user_list) );
     $user_list = preg_replace( "#^(<br />){1}#", "" , $user_list );
     $user_list = preg_replace( "#(<br />){1}$#", "" , $user_list );
     $user_list = preg_replace( "#<br />\s+#",  ","  , $user_list );
  
  
      $DB->simple_construct( array(  'select' => 'id, name',
                'from'   => 'members',
               'where'  => "LOWER(name)='{$user_list}'"
           ));
      $DB->simple_exec();
        
      if ( ! $DB->get_num_rows() )
     {
       $this->moderate_error('cp_error_no_mem');
       return;
      }
      else
      {
       $cc_array = $DB->fetch_row(); 
      }
    
     $DB->do_update( 'topics', array ('curator_id'    =>addslashes(serialize($cc_array)),),"tid={$ibforums->input['t']}" );
      $update="Добавлен куратор: <b>{$cc_array['name']}</b>";
    }
     else
     {
      $DB->do_update( 'topics', array ('curator_id'    =>'',),"tid={$ibforums->input['t']}" );
      $update="Куратор удален!";
     } 
    }
    $DB->simple_construct( array( 'select' => '*', 'from' => 'topics', 'where' => 'tid='.intval($ibforums->input['t']) ) );
$DB->simple_exec();
     
$this->topic = $DB->fetch_row();

  $list = unserialize(stripslashes($this->topic['curator_id']));
   $this->output .= $this->html->topic_curator_splash ($this->forum, $this->topic, $std->return_md5_check(),$list['name'], $update );
 
  $print->pop_up_window( "", $this->output );
}

 

3.4 ищем функцию delete_post и

 

3.4.1 внутри нее находим запрос

$DB->simple_construct( array( 'select' => 'pid, author_id, post_date, new_topic', 'from' => 'posts', 'where' => "topic_id={$this->topic['tid']} and pid={$ibforums->input['p']}" ) );

заменяем его на

  $DB->simple_construct( array( 'select' => 'p.pid, p.author_id, p.post_date, p.new_topic, t.curator_id', 
           'from' => 'posts p LEFT JOIN '.SQL_PREFIX.'topics t ON (t.tid=p.topic_id)', 
           'where' => "p.topic_id={$this->topic['tid']} and p.pid={$ibforums->input['p']}" ) );

 

3.4.2 ищем внутри

  else if ( ($ibforums->member['g_delete_own_posts'] == 1) and ( $ibforums->member['id'] == $post['author_id'] ) )
  {
   $passed = 1;
  }

и ПОСЛЕ добавляем

  else if ($post['curator_id'])
  {
    $list = unserialize(stripslashes($post['curator_id']));
   if ($ibforums->member['id']==$list['id']) $passed = 1;
  }

 

4. берем файлик sources/topics.php..

 

4.1 ищем функцию

 function delete_button($post_id, $poster)

внутри нее строчку

if ($this->moderator['delete_post']) return $button;

и добавляем после

  if ($this->topic['curator_id'])
  { 
    $list = unserialize(stripslashes($this->topic['curator_id']));
   if ($ibforums->member['id']==$list['id']) return $button;
  }

 

4.2 чуть ниже находим функцию

 function edit_button($post_id, $poster, $post_date)

и внутри нее находим

if ($this->moderator['edit_post']) return $button;

и после добавялем

  if ($this->topic['curator_id'])
  { 
    $list = unserialize(stripslashes($this->topic['curator_id']));
   if ($ibforums->member['id']==$list['id']) return $button;
  }

 

5. берем файлик sources\lib\post_edit_post.php

 

5.1 внутри него почти сверху находим запрос (второй сверху)

$DB->simple_construct( array( 'select' => '*', 'from' => 'posts', 'where' => "pid=".intval($ibforums->input['p']) ) );

заменяем его на

$DB->simple_construct( array( 'select' => 'p.*, t.curator_id', 'from' => 'posts p LEFT JOIN '.SQL_PREFIX.'topics t ON (t.tid=p.topic_id)', 'where' => "pid=".intval($ibforums->input['p']) ) );

 

5.2 чуть ниже находим

  if ($this->moderator['edit_post'])
  {
   $can_edit = 1;
  }

и после добавляем

  if ($this->orig_post['curator_id']) 
  {
    $list = unserialize(stripslashes($this->topic['curator_id']));
   if ($ibforums->member['id']==$list['id'])	$can_edit = 1;
  }

 

вот и все...

тестите:D

скрипт будет совершенствоваться конечно же..

можно высказать пожелания

зы. проверял- работает;)

Ссылка на комментарий
Поделиться на других сайтах

  • Ответы 103
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

Загружено фотографий

winnie

спасибо :D

Ссылка на комментарий
Поделиться на других сайтах

Total с нуля

прошлую версию смотрел, забыл кто выкладывал - слишком там все мудрено было

 

зы. да назначение производится внизу каждой страницы топика там где выпадающие меню модератора

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

winnie

Еще бы добавить такую ернуду: когда юзаешь фичу сообщить модератору, то "кляуза" отписывалась и куратору... Или отдельную кнопку сделать: "Сообщить куратору"... или добавить напротив названия темы (где выбор режима просмотра: Стандартный, Линейный, Каскадный") popup c именами кураторов и ссылками на их Приват...

Ссылка на комментарий
Поделиться на других сайтах

  • 1 год спустя...
  • 2 недели спустя...

Ценное дополнение, которого не хватает моду

 

Необходим вывод ника текущего куратора темы, если он есть. Если нет, то просто добавить куратора.

 

а эту часть кода я бы переписал так

 

// Check permissions
  else if ($this->moderator['is_mod'] == 1)

 

else if ($ibforums->member['is_mod'] == 1)

 

потому что иначе не будет разрешено модераторам использовать мод (по крайней мере такая конструкция работает не везде)

 

А еще данный мод не является безопасным, потому что любой модератор любого раздела может добавить куратора на любую тему .... а это значит что возможно модифицирование любого топика, включая топики, которые публикуются на главной странице портала ....

 

достаточно изменить лишь название топика в запросе

 

../index.php?act=mod&CODE=topiccurator&t=(нужный топик)&f=(нужный форум)&auth_key=(тут идет ключ авторизации)

кстати f= можно и не использовать даже ... номер топика однозначно определяет положение .... вобщем эта часть в запросе даже и не нужна ...

вот и все :D нужно делать более жесткое назначение прав для разрешения расстановки кураторов.

 

для задания прав расстановки кураторов по ID нужно сделать так

 

if ($ibforums->member['id'] == нужный ID && $this->forum['id'] == нужный форум)

Ссылка на комментарий
Поделиться на других сайтах

Кстати есть ценная идея по доработке.

Автоматически назначать куратором темы автора, если у него больше 500 мессаг, допустим.

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

Хотелось бы его поставить на 2.1.3.

Поэтому пытаюсь адапитровать сам(пока безуспешно).

 

Но всё-таки хотелось бы увидеть готовый вариант для 2.1.х

Ссылка на комментарий
Поделиться на других сайтах

Успешно прицепил к 2.1.3(немного доработал):

1. создаем в таблице ibf_topics поле новое[/b]

ALTER TABLE `ibf_topics` ADD `curator_id` VARCHAR( 255 ) DEFAULT NULL ;

 

topics.php

 

if ($this->moderator['delete_post']) return $button;
	 //curator
	if ($this->topic['curator_id'])
 { 
$list = unserialize(stripslashes($this->topic['curator_id']));

  if ($this->ipsclass->member['id']==$list['id']) return $button;
 }
//curator
	if ($poster['id'] == $this->ipsclass->member['id'] and ($this->ipsclass->member['g_delete_own_posts'])) return $button;

 

		if ($this->moderator['edit_post']) return $button;
//curator
	if ($this->topic['curator_id'])
 { 
$list = unserialize(stripslashes($this->topic['curator_id']));
  if ($this->ipsclass->member['id']==$list['id']) return $button;
 }
//curator
	if ($poster['id'] == $this->ipsclass->member['id'] and ($this->ipsclass->member['g_edit_posts']))

 

class_post_edit.php

		//-----------------------------------------
	// Load the old post
	//-----------------------------------------
	//curator
	$this->ipsclass->DB->simple_construct(array( 'select' => 'p.*, t.curator_id', 'from' => 'posts p LEFT JOIN '.SQL_PREFIX.'topics t ON (t.tid=p.topic_id)', 'where' => "pid=".intval($this->ipsclass->input['p'])  ) );
	//curator
	$this->ipsclass->DB->simple_exec();

 

		if ($this->moderator['edit_post'])
	{
		$can_edit = 1;
	}

	//curator
	if ($this->orig_post['curator_id']) 
 {
$list = unserialize(stripslashes($this->topic['curator_id']));
  if ($this->ipsclass->member['id']==$list['id']) $can_edit = 1;
 }
//curator
	if ( ($this->orig_post['author_id'] == $this->ipsclass->member['id']) and ($this->ipsclass->member['g_edit_posts']) )

 

moderate.php

 

	function auto_run()
{
	//curator
	$post_array	  = array( '04', '02', '20', '22', 'resync', 'prune_start', 'prune_finish', 'prune_move', 'editmember', 'topiccurator' );
   //curator

			case 'editmember':
			$this->edit_member();
			break;
			//curator
			case 'topiccurator':	  
			$this->topic_curator(); 
			break;
			//curator
		default:

 

 

	/*-------------------------------------------------------------------------*/
// Delete post
/*-------------------------------------------------------------------------*/

function delete_post()
{
	// Get this post id.

	$this->ipsclass->input['p'] = intval($this->ipsclass->input['p']);
	//curator
	$this->ipsclass->DB->simple_construct( array( 'select' => 'p.pid, p.author_id, p.post_date, p.new_topic, t.curator_id', 'from' => 'posts p LEFT JOIN '.SQL_PREFIX.'topics t ON (t.tid=p.topic_id)', 'where' => "p.topic_id={$this->topic['tid']} and p.pid={$this->ipsclass->input['p']}" ) );
	//curator
	$this->ipsclass->DB->simple_exec();

 

	//curator
function topic_curator()
{
 global $DB, $std, $forums, $ibforums, $print;

	  //-----------------------------------------
	// Check Permissions
	//-----------------------------------------

	if ( ! $this->ipsclass->member['g_is_supmod'] )
	{
		$this->moderate_error();
	}

//-----------------------------------------------
// Are we checking first?
//-----------------------------------------------
 $update='';

 if ($this->ipsclass->input['check'] == 1)
 {
$user_list=$this->ipsclass->input['topic_curator'];
if (isset($user_list) and $user_list != "")
{
 //---------------------------
 // Sort out the array
 //---------------------------

 $user_list = str_replace(  "<br>", "<br />" , trim($user_list) );
 $user_list = str_replace(  "<br /><br />", "<br />" , trim($user_list) );
 $user_list = preg_replace( "#^(<br />){1}#", "" , $user_list );
 $user_list = preg_replace( "#(<br />){1}$#", "" , $user_list );
 $user_list = preg_replace( "#<br />\s+#",  ","  , $user_list );


  $this->ipsclass->DB->simple_construct( array(  'select' => 'id, name',
			'from'   => 'members',
		   'where'  => "LOWER(name)='{$user_list}'"
	   ));
  $this->ipsclass->DB->simple_exec();

  if ( ! $this->ipsclass->DB->get_num_rows() )
 {
   $this->moderate_error('cp_error_no_mem');
   return;
  }
  else
  {
   $cc_array = $this->ipsclass->DB->fetch_row(); 
  }

 $this->ipsclass->DB->do_update( 'topics', array ('curator_id'	=>addslashes(serialize($cc_array)),),"tid={$this->ipsclass->input['t']}" );
  $update="Добавлен куратор: <b>{$cc_array['name']}</b>";
//  $this->ipsclass->DB->do_update
}
 else
 {
  $this->ipsclass->DB->do_update( 'topics', array ('curator_id'	=>'',),"tid={$this->ipsclass->input['t']}" );
  $update="Куратор удалён!";
 } 
}
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'topics', 'where' => 'tid='.intval($this->ipsclass->input['t']) ) );
$this->ipsclass->DB->simple_exec();

$this->topic = $this->ipsclass->DB->fetch_row();

 $list = unserialize(stripslashes($this->topic['curator_id']));
  $this->output .= $this->ipsclass->compiled_templates['skin_mod']->topic_curator_splash ($this->forum, $this->topic, $this->ipsclass->return_md5_check(),$list['name'], $update );
// $print->pop_up_window( "", $this->output );
$this->ipsclass->print->pop_up_window( "", $this->output );
}
//curator
/*-------------------------------------------------------------------------*/
// Edit member

 

 

		else if ( ($this->ipsclass->member['g_delete_own_posts'] == 1) and ( $this->ipsclass->member['id'] == $post['author_id'] ) )
	{
		$passed = 1;
	}
		//curator//
	else if ($post['curator_id'])
 {
$list = unserialize(stripslashes($post['curator_id']));
  if ($this->ipsclass->member['id']==$list['id']) $passed = 1;
 }
//curator
	else

 

 

Добавляем кнопку "Управление Куратором"

ACP Home / Skin Manager Home / Edit Template HTML / Topic View/ TableFooter

ищем строчку

<form name="modform" method="post" action="{ipb.script_url}act=mod&CODE=postchoice&f={$data['TOPIC']['forum_id']}&t={$data['TOPIC']['tid']}" onsubmit="return checkdelete();">

и ПЕРЕД ней добавляем

<form method="POST" name="modformCurator" action="{ipb.script_url}act=mod&CODE=topiccurator&t={$data[TOPIC]['tid']}&f={$data['FORUM']['id']}&auth_key={$auth_key}"> <input type="submit" value="Управление Куратором" class="button" /></form>

 

 

 

Новый Template bit такой же.

 

ACP Home / Skin Manager Home / Edit Template HTML

выбираем Moderator Function и там жмем кнопку Add Template Bit

и в появившемся окне заполняем поля

 

New Template Bit Name

topic_curator_splash

New Template Bit Incoming Data Variables

$forum="", $topic="", $auth_key="", $list_user="", $update=""

большое поле

</script><script language='javascript' type="text/javascript">
<!--
function find_users()
{
 url = "index.php?act=legends&CODE=finduser_one&s=&entry=textarea&name=topic_curator&sep=none";
 window.open(url,'FindUsers','width=400,height=250,resizable=yes,scrollbars=yes'); 
}
//-->
</script>
<div class='borderwrap'>
 <div class='maintitle'>Добавить куратора для  {$topic['title']}</div>
<div class='pformstrip'>{$update}</div>
<div class='tablepad'>Впишите точное имя пользователя или воспользуйтесь поиском.<br>
Пустое поле удаляет куратора.</div>
<form action='{ipb.script_url}' method='POST' name='REPLIER' >
 <input type='hidden' name='s' value='{ipb.session_id}'>
 <input type='hidden' name='act' value='mod'>
 <input type='hidden' name='CODE' value='topiccurator'>
 <input type='hidden' name='f' value='{$forum['id']}'>
 <input type='hidden' name='t' value='{$topic['tid']}'>
 <input type='hidden' name='auth_key' value='$auth_key' />
<input type='hidden' name='check' value='1'>

 <div class='pformstrip'>{ipb.lang['excl_acc_title2']}</div>

<table width="100%" cellspacing="0">
<tr>
<td class='pformright' align='center'>
<input type="text" name='topic_curator' size='30' value={$list_user}><br />
<input type='button' class='forminput' name='findusers' onclick='find_users()' value='{ipb.lang['find_user_names']}' />
</td></tr></table>
 <div class='formsubtitle' align='center'><input type='submit' value='{ipb.lang['cp_prune_sub1']}' class='button' /></div>
</form>
<form method="POST" name="modformCurator" action="java script:history.go(-1);"> <input type="submit" value="Вернуться Назад" class="button" /></form>
</div>

 

 

 

 

Добавление куратора работает.

Если имя куратора не вводить - куратор удаляется.

Изменено пользователем Zhezl
Ссылка на комментарий
Поделиться на других сайтах

  • 3 недели спустя...
а возможнол и дораббоатат что бы указанная группа (указанная заранее) пользователй (не модераторы или админы) становилдись кураторами сразу после открытия темы?
Ссылка на комментарий
Поделиться на других сайтах

Можно. Но надо ковырять. :D

Просто сразу после создания темы надо записать автора как куратора, при этом проверить mgroup.

Ссылка на комментарий
Поделиться на других сайтах

Мод еще конено нада фиксить)) немного непрально написал он под

2.1.3

 

посидел минут 15

Переделал, работает :D

не понял, то как здесь писали под 2.1.3 не пашет?

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...
  • 2 недели спустя...
А как сделать чтобы только супермодераторы, админы могли назначать куратора темы ?? Просто надо чтобы у модераторов такой возможности не было!
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.