winnie Опубликовано 13 Сентября 2004 Жалоба Поделиться Опубликовано 13 Сентября 2004 вот вроде как первая версия ЧЕГО ДЕЛАЕТ?Любой теме можно назначить куратора (следящего) котороый может редактировать любые посты и удалять сообщения в своей теменазначить куратора может модератор в своем форуме, супермодераторы, админывообщем вот сама модификация.. 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 Nametopic_curator_splashNew 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; } вот и все...теститескрипт будет совершенствоваться конечно же..можно высказать пожеланиязы. проверял- работает Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Iris Опубликовано 13 Сентября 2004 Жалоба Поделиться Опубликовано 13 Сентября 2004 winnie спасибо Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Total Опубликовано 13 Сентября 2004 Жалоба Поделиться Опубликовано 13 Сентября 2004 winnie а скрипт делался на основе прошлых версий (1.*) или с нуля писал ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
winnie Опубликовано 14 Сентября 2004 Автор Жалоба Поделиться Опубликовано 14 Сентября 2004 Total с нуляпрошлую версию смотрел, забыл кто выкладывал - слишком там все мудрено было зы. да назначение производится внизу каждой страницы топика там где выпадающие меню модератора Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Cepera Опубликовано 24 Сентября 2004 Жалоба Поделиться Опубликовано 24 Сентября 2004 установил, работает, спасибо Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
shuks Опубликовано 27 Сентября 2004 Жалоба Поделиться Опубликовано 27 Сентября 2004 winnie Еще бы добавить такую ернуду: когда юзаешь фичу сообщить модератору, то "кляуза" отписывалась и куратору... Или отдельную кнопку сделать: "Сообщить куратору"... или добавить напротив названия темы (где выбор режима просмотра: Стандартный, Линейный, Каскадный") popup c именами кураторов и ссылками на их Приват... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Goodwin Опубликовано 26 Ноября 2005 Жалоба Поделиться Опубликовано 26 Ноября 2005 А для v2.0.3 идет ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
PhreakeR Опубликовано 27 Ноября 2005 Жалоба Поделиться Опубликовано 27 Ноября 2005 Goodwin, пойдет. Для 2.0.х. А можно сделать, чтобы автор тему автоматтом становился куратором? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
olegd Опубликовано 12 Декабря 2005 Жалоба Поделиться Опубликовано 12 Декабря 2005 Goodwin, пойдет. Для 2.0.х. А можно сделать, чтобы автор тему автоматтом становился куратором? под новые версии есть? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
replicant Опубликовано 13 Декабря 2005 Жалоба Поделиться Опубликовано 13 Декабря 2005 Ценное дополнение, которого не хватает моду Необходим вывод ника текущего куратора темы, если он есть. Если нет, то просто добавить куратора. а эту часть кода я бы переписал так // 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= можно и не использовать даже ... номер топика однозначно определяет положение .... вобщем эта часть в запросе даже и не нужна ...вот и все нужно делать более жесткое назначение прав для разрешения расстановки кураторов. для задания прав расстановки кураторов по ID нужно сделать так if ($ibforums->member['id'] == нужный ID && $this->forum['id'] == нужный форум) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
7th Guest Опубликовано 16 Декабря 2005 Жалоба Поделиться Опубликовано 16 Декабря 2005 На 2.1.3 заведется? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
PhreakeR Опубликовано 19 Декабря 2005 Жалоба Поделиться Опубликовано 19 Декабря 2005 Кстати есть ценная идея по доработке.Автоматически назначать куратором темы автора, если у него больше 500 мессаг, допустим. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Zhezl Опубликовано 28 Декабря 2005 Жалоба Поделиться Опубликовано 28 Декабря 2005 Хотелось бы его поставить на 2.1.3.Поэтому пытаюсь адапитровать сам(пока безуспешно). Но всё-таки хотелось бы увидеть готовый вариант для 2.1.х Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Zhezl Опубликовано 29 Декабря 2005 Жалоба Поделиться Опубликовано 29 Декабря 2005 (изменено) Успешно прицепил к 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 Nametopic_curator_splashNew 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> Добавление куратора работает.Если имя куратора не вводить - куратор удаляется. Изменено 18 Марта 2006 пользователем Zhezl Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
bee Опубликовано 14 Января 2006 Жалоба Поделиться Опубликовано 14 Января 2006 а возможнол и дораббоатат что бы указанная группа (указанная заранее) пользователй (не модераторы или админы) становилдись кураторами сразу после открытия темы? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Zhezl Опубликовано 18 Января 2006 Жалоба Поделиться Опубликовано 18 Января 2006 Можно. Но надо ковырять. Просто сразу после создания темы надо записать автора как куратора, при этом проверить mgroup. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
EasyBot Опубликовано 20 Января 2006 Жалоба Поделиться Опубликовано 20 Января 2006 Мод еще конено нада фиксить)) немного непрально написал он под2.1.3 посидел минут 15Переделал, работает Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Call Опубликовано 26 Января 2006 Жалоба Поделиться Опубликовано 26 Января 2006 Мод еще конено нада фиксить)) немного непрально написал он под2.1.3 посидел минут 15Переделал, работает не понял, то как здесь писали под 2.1.3 не пашет? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
MotoDen Опубликовано 7 Февраля 2006 Жалоба Поделиться Опубликовано 7 Февраля 2006 EasyBotхотелось бы видеть твою модификацию этого хака! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
EasyBot Опубликовано 7 Февраля 2006 Жалоба Поделиться Опубликовано 7 Февраля 2006 в ближайшие дни сяду и перепишу его)) тогда выложу) в ближайшие дни сяду и перепишу его)) тогда выложу) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
MotoDen Опубликовано 11 Февраля 2006 Жалоба Поделиться Опубликовано 11 Февраля 2006 EasyBotНе хочу мешать переписыванию мода, но когда он выйдет? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
MotoDen Опубликовано 23 Февраля 2006 Жалоба Поделиться Опубликовано 23 Февраля 2006 Так кто-нибудь проверял работоспобность на 2.1.3? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
EasyBot Опубликовано 24 Февраля 2006 Жалоба Поделиться Опубликовано 24 Февраля 2006 у меня работает-) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
MotoDen Опубликовано 25 Февраля 2006 Жалоба Поделиться Опубликовано 25 Февраля 2006 А как создать таблицу эту? В пхимиАдмин так и не нашел, где можно создать новое поле...Заранее спасибо! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
siemens Опубликовано 3 Марта 2006 Жалоба Поделиться Опубликовано 3 Марта 2006 А как сделать чтобы только супермодераторы, админы могли назначать куратора темы ?? Просто надо чтобы у модераторов такой возможности не было! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.