Files
IPB/upload/sources/action_admin/forums.php
T
2025-12-19 00:21:15 -08:00

1632 lines
61 KiB
PHP

<?php
/*
+--------------------------------------------------------------------------
| Invision Power Board 2.1.7
| =============================================
| by Matthew Mecham
| (c) 2001 - 2005 Invision Power Services, Inc.
| http://www.invisionpower.com
| =============================================
| Web: http://www.invisionboard.com
| http://www.ibresource.ru/products/invisionpowerboard/
| Time: Tuesday 18th of July 2006 05:56:00 PM
| Release: 52f408a29988b02f45b5e6f4ba5af0ae
| Licence Info: http://www.invisionboard.com/?license
| http://www.ibresource.ru/license
+---------------------------------------------------------------------------
| INVISION POWER BOARD IS NOT FREE / OPEN SOURCE!
+---------------------------------------------------------------------------
| INVISION POWER BOARD ÍÅ ßÂËßÅÒÑß ÁÅÑÏËÀÒÍÛÌ ÏÐÎÃÐÀÌÌÍÛÌ ÎÁÅÑÏÅ×ÅÍÈÅÌ!
| Ïðàâà íà ÏÎ ïðèíàäëåæàò Invision Power Services
| Ïðàâà íà ïåðåâîä IBResource (http://www.ibresource.ru)
+---------------------------------------------------------------------------
| > $Date: 2006-01-31 22:47:20 +0000 (Tue, 31 Jan 2006) $
| > $Revision: 131 $
| > $Author: bfarber $
+---------------------------------------------------------------------------
|
| > Admin Forum functions
| > Module written by Matt Mecham
| > Date started: 1st march 2002
|
| > Module Version Number: 1.0.0
| > DBA Checked: Mon 24th May 2004
+--------------------------------------------------------------------------
*/
if ( ! defined( 'IN_ACP' ) )
{
print "<h1>Íåâåðíûé âõîä</h1> Ó Âàñ íåò äîñòóïà ê äèðåêòèâå ýòîãî ôàéëà. Åñëè Âû ïðîâîäèëè îáíîâëåíèÿ, óáåäèòåñü, ÷òî íå çàáûëè îáíîâèòü 'admin.php'.";
exit();
}
class ad_forums
{
# Global
var $ipsclass;
var $html;
var $forumfunc;
var $base_url;
/**
* Section title name
*
* @var string
*/
var $perm_main = "content";
/**
* Section title name
*
* @var string
*/
var $perm_child = "forum";
/*-------------------------------------------------------------------------*/
// RUN!
/*-------------------------------------------------------------------------*/
function auto_run()
{
//-----------------------------------------
// Kill globals - globals bad, Homer good.
//-----------------------------------------
$tmp_in = array_merge( $_GET, $_POST, $_COOKIE );
foreach ( $tmp_in as $k => $v )
{
unset($$k);
}
$this->ipsclass->forums->forums_init();
//-----------------------------------------
// Load class
//-----------------------------------------
require ROOT_PATH.'sources/lib/admin_forum_functions.php';
$this->forumfunc = new admin_forum_functions();
$this->forumfunc->ipsclass =& $this->ipsclass;
//-----------------------------------------
// LOAD HTML
//-----------------------------------------
$this->html = $this->ipsclass->acp_load_template('cp_skin_forums');
$this->forumfunc->html =& $this->html;
//-----------------------------------------
// To do...
//-----------------------------------------
switch($this->ipsclass->input['code'])
{
case 'new':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':add' );
$this->forum_form('new');
break;
case 'donew':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':add' );
$this->forum_save('new');
break;
//-----------------------------------------
case 'edit':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':edit' );
$this->forum_form('edit');
break;
case 'doedit':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':edit' );
$this->forum_save('edit');
break;
//-----------------------------------------
case 'pedit':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':permedit' );
$this->perm_edit_form();
break;
case 'pdoedit':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':permedit' );
$this->perm_do_edit();
break;
//-----------------------------------------
case 'reorder':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':reorder' );
$this->reorder_form();
break;
case 'doreorder':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':reorder' );
$this->do_reorder();
break;
case 'doreordercat':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':reorder' );
$this->do_reorder();
break;
//-----------------------------------------
case 'delete':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':remove' );
$this->delete_form();
break;
case 'dodelete':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':remove' );
$this->do_delete();
break;
//-----------------------------------------
case 'recount':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':recount' );
$this->recount();
break;
//-----------------------------------------
case 'empty':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':empty' );
$this->empty_form();
break;
case 'doempty':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':empty' );
$this->do_empty();
break;
//-----------------------------------------
case 'frules':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':rules' );
$this->show_rules();
break;
case 'dorules':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':rules' );
$this->do_rules();
break;
//-----------------------------------------
case 'skinedit':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':skin' );
$this->skin_edit();
break;
case 'doskinedit':
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':skin' );
$this->do_skin_edit();
break;
//-----------------------------------------
default:
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':' );
$this->show_forums();
break;
}
}
/*-------------------------------------------------------------------------*/
// Edit forum skins
/*-------------------------------------------------------------------------*/
function skin_edit()
{
if ($this->ipsclass->input['f'] == "")
{
$this->ipsclass->admin->error("Íåâîçìîæíî îïðåäåëèòü ID ôîðóìà, ÷òîáû î÷èñòèòü åãî.");
}
$forum = $this->ipsclass->forums->forum_by_id[ $this->ipsclass->input['f'] ];
//-----------------------------------------
// Make sure we have a legal forum
//-----------------------------------------
if ( ! $forum['id'] )
{
$this->ipsclass->admin->error("Íåëüçÿ èçìåíèòü ID ýòîãî Ôîðóìà");
}
if ( ! $forum['skin_id'] )
{
$forum['skin_id'] = -1;
}
//-----------------------------------------
// Get skins..
//-----------------------------------------
$tmp = $this->ipsclass->skin['_setid'];
$this->ipsclass->skin['_setid'] = $forum['skin_id'];
require_once( ROOT_PATH.'sources/classes/class_display.php' );
$display = new display();
$display->ipsclass =& $this->ipsclass;
$skin_list = $display->_build_skin_list();
$this->ipsclass->skin['_setid'] = $tmp;
//-----------------------------------------
// Do form..
//-----------------------------------------
$this->ipsclass->admin->page_title = "Íàñòðîéêè øàáëîíà ôîðóìà";
$this->ipsclass->admin->page_detail = "Â ýòîé ñåêöèè âû ìîæåòå óñòàíîâèòü èëè óäàëèòü øàáëîí äëÿ âûáðàííîãî ôîðóìà. Ýòîò âûáîð øàáëîíà çàìåíèò øàáëîíû, âûáðàííûå ïîëüçîâàòåëÿìè.";
$this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 1 => array( 'code' , 'doskinedit'),
2 => array( 'act' , 'forum' ),
3 => array( 'section', 'content' ),
4 => array( 'f' , $this->ipsclass->input['f'] ),
) );
$this->ipsclass->adskin->td_header[] = array( "&nbsp;" , "40%" );
$this->ipsclass->adskin->td_header[] = array( "&nbsp;" , "60%" );
$this->ipsclass->html .= $this->ipsclass->adskin->start_table( "Âûáîð øàáëîíà äëÿ ôîðóìà: {$forum['name']}" );
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "<b>Êàêîé øàáëîí óñòàíîâèòü äëÿ ýòîãî ôîðóìà?</b>" ,
"<select class='dropdown' name='fsid'><option value='-1'>--Íåò / Óäàëèòü âñå--</option>{$skin_list}</select>"
) );
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "<b>Ïðèìåíèòü êî âñåì ïîäôîðóìàì?</b>" ,
$this->ipsclass->adskin->form_yes_no( 'apply_to_children' )
) );
$this->ipsclass->html .= $this->ipsclass->adskin->end_form("Óñòàíîâèòü íàñòðîéêè øàáëîíà");
$this->ipsclass->html .= $this->ipsclass->adskin->end_table();
$this->ipsclass->admin->output();
}
/*-------------------------------------------------------------------------*/
// Complete forum skin edit
/*-------------------------------------------------------------------------*/
function do_skin_edit()
{
if ($this->ipsclass->input['f'] == "")
{
$this->ipsclass->admin->error("Íåâîçìîæíî îïðåäåëèòü ID ôîðóìà, ÷òîáû ïðèíÿòü ýòîò ñòèëü.");
}
$forum = $this->ipsclass->forums->forum_by_id[ $this->ipsclass->input['f'] ];
//-----------------------------------------
// Make sure we have a legal forum
//-----------------------------------------
$this->ipsclass->DB->do_update( 'forums', array( 'skin_id' => $this->ipsclass->input['fsid'] ), 'id='.$this->ipsclass->input['f'] );
//-----------------------------------------
// Find children?
//-----------------------------------------
if ( $this->ipsclass->input['apply_to_children'] )
{
//-----------------------------------------
// Get children!
//-----------------------------------------
$ids = $this->ipsclass->forums->forums_get_children( $this->ipsclass->input['f'] );
if ( count( $ids ) )
{
$this->ipsclass->DB->do_update( 'forums', array( 'skin_id' => $this->ipsclass->input['fsid'] ), 'id IN ('.implode(",",$ids).')' );
}
}
$this->ipsclass->main_msg = "Øàáëîí ôîðóìà îáíîâëåí";
$this->recache_forums();
$this->ipsclass->forums->forums_init();
//-----------------------------------------
// Bounce back to parent...
//-----------------------------------------
$this->ipsclass->input['f'] = $this->ipsclass->forums->forum_by_id[ $this->ipsclass->input['f'] ]['parent_id'];
$this->show_forums();
}
/*-------------------------------------------------------------------------*/
// Show forum rules
/*-------------------------------------------------------------------------*/
function show_rules()
{
if ($this->ipsclass->input['f'] == "")
{
$this->ipsclass->admin->error("Íåâîçìîæíî îïðåäåëèòü ID ôîðóìà, ÷òîáû î÷èñòèòü åãî.");
}
$this->ipsclass->DB->simple_construct( array( 'select' => 'id, name, show_rules, rules_title, rules_text', 'from' => 'forums', 'where' => "id=".$this->ipsclass->input['f'] ) );
$this->ipsclass->DB->simple_exec();
//-----------------------------------------
// Make sure we have a legal forum
//-----------------------------------------
if ( ! $this->ipsclass->DB->get_num_rows() )
{
$this->ipsclass->admin->error("Íåëüçÿ èçìåíèòü ID ýòîãî Ôîðóìà");
}
$forum = $this->ipsclass->DB->fetch_row();
//-----------------------------------------
$this->ipsclass->admin->page_title = "Ïðàâèëà ôîðóìà";
$this->ipsclass->admin->page_detail = "Â ýòîé ñåêöèè âû ìîæåòå äîáàâëÿòü, èçìåíÿòü è óäàëÿòü îòîáðàæàåìûå ïðàâèëà âûáðàííîãî ôîðóìà";
$this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 1 => array( 'code' , 'dorules'),
2 => array( 'act' , 'forum' ),
3 => array( 'section', 'content' ),
4 => array( 'f' , $this->ipsclass->input['f'] ),
) );
$this->ipsclass->adskin->td_header[] = array( "&nbsp;" , "40%" );
$this->ipsclass->adskin->td_header[] = array( "&nbsp;" , "60%" );
$this->ipsclass->html .= $this->ipsclass->adskin->start_table( "Íàñòðîéêè ïðàâèë ôîðóìà" );
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "<b>Ñïîñîá îòîáðàæåíèÿ</b>" ,
$this->ipsclass->adskin->form_dropdown( "show_rules",
array(
0 => array( '0' , 'Íå ïîêàçûâàòü' ),
1 => array( '1' , 'Ïîêàçûâàòü òîëüêî ññûëêó' ),
2 => array( '2' , 'Ïîêàçûâàòü âåñü òåêñò' )
),
$forum['show_rules']
)
) );
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "<b>Çàãîëîâîê ïðàâèë</b>" ,
$this->ipsclass->adskin->form_input("title", $this->ipsclass->txt_stripslashes(str_replace( "'", '&#039;', $forum['rules_title'])))
) );
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "<b>Òåêñò ïðàâèë</b><br>(HTML ðàçðåøåí)" ,
$this->ipsclass->adskin->form_textarea( "body", htmlspecialchars($forum['rules_text'], ENT_QUOTES), 65, 20 )
) );
$this->ipsclass->html .= $this->ipsclass->adskin->end_form("Ñîõðàíèòü èçìåíåíèÿ");
$this->ipsclass->html .= $this->ipsclass->adskin->end_table();
$this->ipsclass->admin->output();
}
/*-------------------------------------------------------------------------*/
// Save forum rules
/*-------------------------------------------------------------------------*/
function do_rules()
{
if ($this->ipsclass->input['f'] == "")
{
$this->ipsclass->admin->error("Íåâîçìîæíî îïðåäåëèòü ID ôîðóìà, ÷òîáû î÷èñòèòü åãî.");
}
$rules = array(
'rules_title' => $this->ipsclass->admin->make_safe($this->ipsclass->txt_stripslashes($_POST['title'])),
'rules_text' => $this->ipsclass->admin->make_safe($this->ipsclass->txt_stripslashes(html_entity_decode($_POST['body'], ENT_QUOTES))),
'show_rules' => $this->ipsclass->input['show_rules']
);
$this->ipsclass->DB->do_update( 'forums', $rules, 'id='.$this->ipsclass->input['f'] );
$this->recache_forums();
$this->ipsclass->main_msg = "Ïðàâèëà ôîðóìà îáíîâëåíû";
//-----------------------------------------
// Bounce back to parent...
//-----------------------------------------
$this->ipsclass->input['f'] = $this->ipsclass->forums->forum_by_id[ $this->ipsclass->input['f'] ]['parent_id'];
$this->show_forums();
}
/*-------------------------------------------------------------------------*/
// RECOUNT FORUM: Recounts topics and posts
/*-------------------------------------------------------------------------*/
function recount($f_override="")
{
if ($f_override != "")
{
// Internal call, remap
$this->ipsclass->input['f'] = $f_override;
}
require_once( ROOT_PATH.'sources/lib/func_mod.php' );
$modfunc = new func_mod();
$modfunc->ipsclass =& $this->ipsclass;
$modfunc->forum_recount($this->ipsclass->input['f']);
$this->recache_forums();
$this->ipsclass->admin->save_log("Âñå ñîîáùåíèÿ íà ôîðóìå ïåðåñ÷èòàíû '{$this->ipsclass->forums->forum_by_id[$this->ipsclass->input['f']]['name']}'");
$this->ipsclass->main_msg = "Ôîðóì ðåñèíõðîíèçèðîâàí";
//-----------------------------------------
// Bounce back to parent...
//-----------------------------------------
$this->ipsclass->input['f'] = $this->ipsclass->forums->forum_by_id[ $this->ipsclass->input['f'] ]['parent_id'];
$this->show_forums();
}
/*-------------------------------------------------------------------------*/
// EMPTY FORUM: Removes all topics and posts, etc.
/*-------------------------------------------------------------------------*/
function empty_form()
{
$form_array = array();
if ($this->ipsclass->input['f'] == "")
{
$this->ipsclass->admin->error("Íåâîçìîæíî îïðåäåëèòü ID ôîðóìà, ÷òîáû î÷èñòèòü åãî.");
}
$this->ipsclass->DB->simple_construct( array( 'select' => 'id, name', 'from' => 'forums', 'where' => "id=".$this->ipsclass->input['f'] ) );
$this->ipsclass->DB->simple_exec();
//-----------------------------------------
// Make sure we have a legal forum
//-----------------------------------------
if ( !$this->ipsclass->DB->get_num_rows() )
{
$this->ipsclass->admin->error("Íåëüçÿ èçìåíèòü ID ýòîãî Ôîðóìà");
}
$forum = $this->ipsclass->DB->fetch_row();
//-----------------------------------------
$this->ipsclass->admin->page_title = "Î÷èñòèòü ôîðóì '{$forum['name']}'";
$this->ipsclass->admin->page_detail = "ÝÒÀ ÎÏÖÈß ÓÄÀËßÅÒ ÂÑÅ ÒÅÌÛ, ÑÎÎÁÙÅÍÈß È ÃÎËÎÑÎÂÀÍÈß.<br>Ñàì æå ôîðóì íå áóäåò óäàëåí - óáåäèòåñü â òîì, ÷òî ýòî äåéñòâèòåëüíî íåîáõîäèìî.";
//-----------------------------------------
$this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 1 => array( 'code' , 'doempty' ),
2 => array( 'act' , 'forum' ),
2 => array( 'section' , 'content' ),
3 => array( 'f' , $this->ipsclass->input['f'] ),
4 => array( 'name' , $forum['name'] ),
) );
//-----------------------------------------
$this->ipsclass->adskin->td_header[] = array( "&nbsp;" , "40%" );
$this->ipsclass->adskin->td_header[] = array( "&nbsp;" , "60%" );
//-----------------------------------------
$this->ipsclass->html .= $this->ipsclass->adskin->start_table( "Î÷èñòêà ôîðóìà '{$forum['name']}'" );
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "<b>Î÷èñòèòü ôîðóì: </b>" , $forum['name'] ) );
$this->ipsclass->html .= $this->ipsclass->adskin->end_form("Î÷èñòèòü ýòîò ôîðóì");
$this->ipsclass->html .= $this->ipsclass->adskin->end_table();
$this->ipsclass->admin->output();
}
/*-------------------------------------------------------------------------*/
// Do empty
/*-------------------------------------------------------------------------*/
function do_empty()
{
//-----------------------------------------
// Get module
//-----------------------------------------
require_once( ROOT_PATH.'sources/lib/func_mod.php' );
$modfunc = new func_mod();
$modfunc->ipsclass =& $this->ipsclass;
if ($this->ipsclass->input['f'] == "")
{
$this->ipsclass->admin->error("Íåâîçìîæíî îïðåäåëèòü ID ôîðóìà");
}
//-----------------------------------------
// Check to make sure its a valid forum.
//-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'select' => 'id, posts, topics', 'from' => 'forums', 'where' => "id=".$this->ipsclass->input['f'] ) );
$this->ipsclass->DB->simple_exec();
if ( ! $forum = $this->ipsclass->DB->fetch_row() )
{
$this->ipsclass->admin->error("Íåâîçìîæíî îïðåäåëèòü ID ôîðóìà");
}
$this->ipsclass->DB->simple_construct( array( 'select' => 'tid', 'from' => 'topics', 'where' => "forum_id=".$this->ipsclass->input['f'] ) );
$outer = $this->ipsclass->DB->simple_exec();
//-----------------------------------------
// What to do..
//-----------------------------------------
while( $t = $this->ipsclass->DB->fetch_row($outer) )
{
$modfunc->topic_delete($t['tid']);
}
//-----------------------------------------
// Rebuild stats
//-----------------------------------------
$modfunc->forum_recount($this->ipsclass->input['f']);
$modfunc->stats_recount();
//-----------------------------------------
// Rebuild forum cache
//-----------------------------------------
$this->recache_forums();
$this->ipsclass->admin->save_log("'{$this->ipsclass->input['name']}' î÷èùåí îò âñåõ ñîîáùåíèé");
$this->ipsclass->input['f'] = "";
$this->ipsclass->main_msg = "Ôîðóì î÷èùåí ;(";
$this->show_forums();
}
/*-------------------------------------------------------------------------*/
// REMOVE FORUM
/*-------------------------------------------------------------------------*/
function delete_form()
{
$form_array = array();
$this->ipsclass->input['f'] = intval($this->ipsclass->input['f']);
if ( ! $this->ipsclass->input['f'] )
{
$this->ipsclass->admin->error("Íåâîçìîæíî îïðåäåëèòü ID ôîðóìà, ÷òîáû óäàëèòü.");
}
$this->ipsclass->DB->simple_construct( array( 'select' => 'id, name', 'from' => 'forums', 'order' => 'position' ) );
$this->ipsclass->DB->simple_exec();
//-----------------------------------------
// Make sure we have more than 1
// forum..
//-----------------------------------------
if ( $this->ipsclass->DB->get_num_rows() < 2 )
{
$this->ipsclass->admin->error("Âû íå ìîæåòå óäàëèòü ýòîò ôîðóì, ñîçäàéòå õîòü îäèí ôîðóì êðîìå ýòîãî äëÿ óäàëåíèÿ âûáðàííîãî ôîðóìà.");
}
while ( $r = $this->ipsclass->DB->fetch_row() )
{
if ($r['id'] == $this->ipsclass->input['f'])
{
$name = $r['name'];
continue;
}
}
$form_array = $this->forumfunc->ad_forums_forum_list(1);
//-----------------------------------------
// Count the number of topics
//-----------------------------------------
$posts = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'count(*) as count', 'from' => 'topics', 'where' => 'forum_id='.$this->ipsclass->input['f'] ) );
//-----------------------------------------
// Count the number of children
//-----------------------------------------
$children = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'count(*) as count', 'from' => 'forums', 'where' => 'parent_id='.$this->ipsclass->input['f'] ) );
//-----------------------------------------
// Start form
//-----------------------------------------
$this->ipsclass->admin->page_title = "Óäàëåíèå ôîðóìà '$name'";
$this->ipsclass->admin->page_detail = "Äî òîãî êàê âû óäàëèòå ýòîò ôîðóì: åñëè âûáðàííûé ôîðóì íå ïóñò, âûáåðèòå, ÷òî âû áóäåòå äåëàòü ñ ñîîáùåíèÿìè ýòîãî ôîðóìà.";
$this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 1 => array( 'code' , 'dodelete'),
2 => array( 'act' , 'forum' ),
3 => array( 'section', 'content' ),
4 => array( 'f' , $this->ipsclass->input['f'] ),
) );
$this->ipsclass->adskin->td_header[] = array( "&nbsp;" , "40%" );
$this->ipsclass->adskin->td_header[] = array( "&nbsp;" , "60%" );
//-----------------------------------------
// Main form
//-----------------------------------------
$this->ipsclass->html .= $this->ipsclass->adskin->start_table( "Äîïîëíèòåëüíàÿ èíôîðìàöèÿ" );
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "<b>Óäàëèòü ôîðóì: </b>" , $name ) );
if ( $posts['count'] )
{
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "<b>Ïåðåìåñòèòü âñå <i>èìåþùèåñÿ òåìû è ñîîáùåíèÿ â ýòîì ôîðóìå</i> â äðóãîé?</b>" ,
$this->ipsclass->adskin->form_dropdown( "MOVE_ID", $form_array )
) );
}
if ( $children['count'] )
{
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "<b>Ïåðåìåñòèòü âñå <i>ñóùåñòâóþùèå òåìû, ñîîáùåíèÿ è ãîëîñîâàíèÿ èç ýòîãî ôîðóìà</i> â ôîðóì:</b>" ,
$this->ipsclass->adskin->form_dropdown( "new_parent_id", $form_array )
) );
}
$this->ipsclass->html .= $this->ipsclass->adskin->end_form( "Óäàëèòü ôîðóì" );
$this->ipsclass->html .= $this->ipsclass->adskin->end_table();
$this->ipsclass->admin->output();
}
/*-------------------------------------------------------------------------*/
// PROCESS DELETE
/*-------------------------------------------------------------------------*/
function do_delete()
{
$this->ipsclass->input['f'] = intval($this->ipsclass->input['f']);
$this->ipsclass->input['MOVE_ID'] = intval($this->ipsclass->input['MOVE_ID']);
$this->ipsclass->input['new_parent_id'] = intval($this->ipsclass->input['new_parent_id']);
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'forums', 'where' => "id=".$this->ipsclass->input['f'] ) );
$this->ipsclass->DB->simple_exec();
$forum = $this->ipsclass->DB->fetch_row();
if ( ! $this->ipsclass->input['f'] )
{
$this->ipsclass->admin->error("Íåâîçìîæíî îïðåäåëèòü èñòî÷íèê ID ôîðóìà.");
}
if ( ! $this->ipsclass->input['new_parent_id'] )
{
$this->ipsclass->input['new_parent_id'] = -1;
}
else
{
if ( $this->ipsclass->input['new_parent_id'] == $this->ipsclass->input['f'] )
{
$this->ipsclass->main_msg = "Âû íå ìîæåòå ïåðåìåñòèòü ïîäôîðóìû â óäàëÿåìûé ôîðóì!";
$this->delete_form();
}
}
//-----------------------------------------
// Get library
//-----------------------------------------
require_once( ROOT_PATH.'sources/lib/func_mod.php' );
$modfunc = new func_mod();
$modfunc->ipsclass =& $this->ipsclass;
//-----------------------------------------
// Move stuff
//-----------------------------------------
if ( $this->ipsclass->input['MOVE_ID'] )
{
if ( $this->ipsclass->input['MOVE_ID'] == $this->ipsclass->input['f'] )
{
$this->ipsclass->main_msg = "Âû íå ìîæåòå ïåðåìåñòèòü òåìû, ñîîáùåíèÿ è ãîëîñîâàíèÿ â óäàëÿåìûé ôîðóì!";
$this->delete_form();
}
//-----------------------------------------
// Move topics...
//-----------------------------------------
$this->ipsclass->DB->do_update( 'topics', array( 'forum_id' => $this->ipsclass->input['MOVE_ID'] ), 'forum_id='.$this->ipsclass->input['f'] );
//-----------------------------------------
// Move polls...
//-----------------------------------------
$this->ipsclass->DB->do_update( 'polls', array( 'forum_id' => $this->ipsclass->input['MOVE_ID'] ), 'forum_id='.$this->ipsclass->input['f'] );
//-----------------------------------------
// Move voters...
//-----------------------------------------
$this->ipsclass->DB->do_update( 'voters', array( 'forum_id' => $this->ipsclass->input['MOVE_ID'] ), 'forum_id='.$this->ipsclass->input['f'] );
$modfunc->forum_recount( $this->ipsclass->input['MOVE_ID'] );
}
//-----------------------------------------
// Delete the forum
//-----------------------------------------
$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'forums', 'where' => "id=".$this->ipsclass->input['f'] ) );
//-----------------------------------------
// Delete any moderators, if any..
//-----------------------------------------
$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'moderators', 'where' => "forum_id=".$this->ipsclass->input['f'] ) );
//-----------------------------------------
// Delete forum subscriptions
//-----------------------------------------
$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'forum_tracker', 'where' => "forum_id=".$this->ipsclass->input['f'] ) );
//-----------------------------------------
// Update children
//-----------------------------------------
if ( ! $this->ipsclass->input['new_parent_id'] )
{
$this->ipsclass->input['new_parent_id'] = -1;
}
$this->ipsclass->DB->do_update( 'forums', array( 'parent_id' => $this->ipsclass->input['new_parent_id'] ), "parent_id={$this->ipsclass->input['f']}" );
//-----------------------------------------
// Rebuild forum cache
//-----------------------------------------
$this->recache_forums();
//-----------------------------------------
// Rebuild moderator cache
//-----------------------------------------
require_once( ROOT_PATH.'sources/action_admin/moderator.php' );
$moderator = new ad_moderator();
$moderator->ipsclass =& $this->ipsclass;
$moderator->rebuild_moderator_cache();
$this->ipsclass->admin->save_log("Ôîðóì óäàëåí '{$forum['name']}'");
$this->ipsclass->admin->done_screen("Ôîðóì áûë óñïåøíî óäàëåí", "Óïðàâëåíèå ôîðóìîì", $this->ipsclass->form_code, 'redirect' );
}
/*-------------------------------------------------------------------------*/
// ADD / EDIT FORUM
/*-------------------------------------------------------------------------*/
function forum_form( $type='edit' )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$form = array();
$forum = array();
$forum_id = intval($this->ipsclass->input['f']);
$parentid = intval($this->ipsclass->input['p']) ? intval($this->ipsclass->input['p']) : -1;
$cat_id = intval($this->ipsclass->input['c']);
$f_name = $this->ipsclass->parse_clean_value(urldecode($_REQUEST['name']));
$subcanpost = ( $this->ipsclass->input['c'] == 1 ) ? 0 : 1;
$perm_matrix = "";
$dd_state = array( 0 => array( 1, 'Àêòèâíûé' ), 1 => array( 0, 'Òîëüêî äëÿ ÷òåíèÿ àðõèâîâ' ) );
$dd_moderate = array(
0 => array( 0, 'Íåò' ),
1 => array( 1, 'Ìîäåðèðîâàòü âñå íîâûå òåìû è ñîîáùåíèÿ' ),
2 => array( 2, 'Ìîäåðèðîâàòü òîëüêî íîâûå òåìû' ),
3 => array( 3, 'Ìîäåðèðîâàòü òîëüêî íîâûå îòâåòû' ),
);
$dd_prune = array(
0 => array( 1, 'Äåíü' ),
1 => array( 5, '5 äíåé' ),
2 => array( 7, '7 äíåé' ),
3 => array( 10, '10 äíåé' ),
4 => array( 15, '15 äíåé' ),
5 => array( 20, '20 äíåé' ),
6 => array( 25, '25 äíåé' ),
7 => array( 30, '30 äíåé' ),
8 => array( 60, '60 äíåé' ),
9 => array( 90, '90 äíåé' ),
10=> array( 100,'Ïîêàçûâàòü âñå' ),
);
$dd_order = array(
0 => array( 'last_post', 'Ïî äàòå ïîñëåäíåãî ñîîáùåíèÿ' ),
1 => array( 'title' , 'Íàçâàíèÿì òåì' ),
2 => array( 'starter_name', 'Àâòîðó òåì' ),
3 => array( 'posts' , 'Ñîîáùåíèÿì â òåìàõ' ),
4 => array( 'views' , 'Ïðîñìîòðó òåì' ),
5 => array( 'start_date', 'Äàòå ñîçäàíèÿ òåì' ),
6 => array( 'last_poster_name' , 'Ïîñëåäíèì àâòîðàì' )
);
$dd_by = array(
0 => array( 'Z-A', 'Ïî óáûâàíèþ (Z - A, 0 - 10)' ),
1 => array( 'A-Z', 'Ïî âîçðàñòàíèþ (A - Z, 10 - 0)' )
);
$dd_filter = array(
0 => array( 'all', 'Âñå òåìû' ),
1 => array( 'open', 'Îòêðûòûå òåìû' ),
2 => array( 'hot', 'Ãîðÿ÷èå òåìû' ),
3 => array( 'poll', 'Îïðîñû' ),
4 => array( 'locked', 'Çàêðûòûå òåìû' ),
5 => array( 'moved', 'Îòêðûòûå òåìû' ),
6 => array( 'istarted', 'Òåìû, ñîçäàííûå ïîëüçîâàòåëåì' ),
7 => array( 'ireplied', 'Òåìû, ñ îòâåòàìè ïîëüçîâàòåëÿ' ),
);
//-----------------------------------------
// Set up title, desc
//-----------------------------------------
$this->ipsclass->admin->page_detail = "Ýòà ñåêöèÿ ïîçâîëÿåò âàì äîáàâëÿòü íîâûå è èçìåíÿòü óæå ñóùåñòâóþùèå ôîðóìû.<br />Åñëè âû õîòèòå óñòàíîâèòü ìàñêè äîñòóïà ê ñóùåñòâóþùåìó ôîðóìó (òàêèå êàê âîçìîæíîñòü ïðîñìîòðà ôîðóìà, ñîçäàíèå òåì, îòâåòû è çàãðóçêè) íàæìèòå íà 'Ìàñêè äîñòóïà'.";
//-----------------------------------------
// EDIT
//-----------------------------------------
if ( $type == 'edit' )
{
//-----------------------------------------
// Check
//-----------------------------------------
if ( ! $forum_id )
{
$this->ipsclass->admin->error("Âû íå âûáðàëè ôîðóì äëÿ ðåäàêòèðîâàíèÿ!");
}
//-----------------------------------------
// Do not show forum in forum list
//-----------------------------------------
$this->forumfunc->exclude_from_list = $forum_id;
//-----------------------------------------
// Get this forum
//-----------------------------------------
$forum = $this->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'forums', 'where' => 'id='.$this->ipsclass->input['f'] ) );
//-----------------------------------------
// Check
//-----------------------------------------
if ($forum['id'] == "")
{
$this->ipsclass->admin->error("Íåâîçìîæíî íàéòè ôîðóì ñ ID {$this->ipsclass->input['f']}");
}
//-----------------------------------------
// Set up code buttons
//-----------------------------------------
$title = "Ðåäàêòèðóåìûé ôîðóì: {$forum['name']}";
$button = "Ðåäàêòèðîâàòü ôîðóì";
$code = "doedit";
//-----------------------------------------
// Basic title
//-----------------------------------------
$basic_title = "<table cellpadding='0' cellspacing='0' border='0' width='100%'>
<tr>
<td align='left' width='40%' style='font-size:12px; vertical-align:middle;font-weight:bold; color:#FFF;'>Îñíîâíûå íàñòðîéêè {$forum['name']}</td>
<td align='right' width='60%'>".
$this->ipsclass->adskin->js_make_button("Ïðàâèëà ôîðóìà" , $this->ipsclass->base_url."&{$this->ipsclass->form_code}&code=frules&f={$this->ipsclass->input['f']}")."&nbsp;".
$this->ipsclass->adskin->js_make_button("Øàáëîí ôîðóìà", $this->ipsclass->base_url."&{$this->ipsclass->form_code}&code=skinedit&f={$this->ipsclass->input['f']}")."&nbsp;".
$this->ipsclass->adskin->js_make_button("Ïåðåñ÷åò ñîîáùåíèé" , $this->ipsclass->base_url."&{$this->ipsclass->form_code}&code=recount&f={$this->ipsclass->input['f']}")
."&nbsp;&nbsp;</td>
</tr>
</table>";
}
//-----------------------------------------
// NEW
//-----------------------------------------
else
{
# Ensure there is an ID
$this->ipsclass->input['f'] = 0;
$forum = array(
'sub_can_post' => $subcanpost,
'name' => $f_name ? $f_name : 'Íîâûé ôîðóì',
'parent_id' => $parentid,
'use_ibc' => 1,
'quick_reply' => 1,
'allow_poll' => 1,
'prune' => 100,
'topicfilter' => 'all',
'sort_key' => 'last_post',
'sort_order' => 'Z-A',
'inc_postcount'=> 1,
);
$title = "Äîáàâëåíèå ôîðóìà";
$button = "Äîáàâèòü ôîðóì";
$code = "donew";
$basic_title = 'Îñíîâíûå íàñòðîéêè';
}
//-----------------------------------------
// Build forumlist
//-----------------------------------------
$forumlist = $this->forumfunc->ad_forums_forum_list();
//-----------------------------------------
// Page title...
//-----------------------------------------
$this->ipsclass->admin->page_title = $title;
//-----------------------------------------
// Generate form items
//-----------------------------------------
# Main settings
$form['name'] = $this->ipsclass->adskin->form_input( 'name' , $this->ipsclass->parse_clean_value( $_POST['name'] ) ? $this->ipsclass->parse_clean_value( $_POST['name'] ) : $forum['name'] );
$form['description'] = $this->ipsclass->adskin->form_textarea("description" , $this->ipsclass->my_br2nl( $_POST['description'] ? $_POST['description'] : $forum['description'] ) );
$form['parent_id'] = $this->ipsclass->adskin->form_dropdown("parent_id" , $forumlist, $_POST['parent_id'] ? $_POST['parent_id'] : $forum['parent_id'] );
$form['status'] = $this->ipsclass->adskin->form_dropdown("status" , $dd_state , $_POST['status'] ? $_POST['status'] : $forum['status'] );
$form['sub_can_post'] = $this->ipsclass->adskin->form_yes_no( 'sub_can_post', $_POST['sub_can_post'] ? $_POST['sub_can_post'] : $forum['sub_can_post'] );
# Redirect options
$form['redirect_url'] = $this->ipsclass->adskin->form_input( 'redirect_url' , $_POST['redirect_url'] ? $_POST['redirect_url'] : $forum['redirect_url'] );
$form['redirect_on'] = $this->ipsclass->adskin->form_yes_no('redirect_on' , $_POST['redirect_on'] ? $_POST['redirect_on'] : $forum['redirect_on'] );
$form['redirect_hits'] = $this->ipsclass->adskin->form_input( 'redirect_hits', $_POST['redirect_hits'] ? $_POST['redirect_hits'] : $forum['redirect_hits'] );
# Permission settings
$form['permission_showtopic'] = $this->ipsclass->adskin->form_yes_no( 'permission_showtopic' , $_POST['permission_showtopic'] ? $_POST['permission_showtopic'] : $forum['permission_showtopic'] );
$form['permission_custom_error'] = $this->ipsclass->adskin->form_textarea("permission_custom_error", $this->ipsclass->my_br2nl( $_POST['permission_custom_error'] ? $_POST['permission_custom_error'] : $forum['permission_custom_error'] ) );
# Forum settings
$form['use_html'] = $this->ipsclass->adskin->form_yes_no('use_html' , $_POST['use_html'] ? $_POST['use_html'] : $forum['use_html'] );
$form['use_ibc'] = $this->ipsclass->adskin->form_yes_no('use_ibc' , $_POST['use_ibc'] ? $_POST['use_ibc'] : $forum['use_ibc'] );
$form['quick_reply'] = $this->ipsclass->adskin->form_yes_no('quick_reply' , $_POST['quick_reply'] ? $_POST['quick_reply'] : $forum['quick_reply'] );
$form['allow_poll'] = $this->ipsclass->adskin->form_yes_no('allow_poll' , $_POST['allow_poll'] ? $_POST['allow_poll'] : $forum['allow_poll'] );
$form['allow_pollbump'] = $this->ipsclass->adskin->form_yes_no('allow_pollbump' , $_POST['allow_pollbump'] ? $_POST['allow_pollbump'] : $forum['allow_pollbump'] );
$form['inc_postcount'] = $this->ipsclass->adskin->form_yes_no('inc_postcount' , $_POST['inc_postcount'] ? $_POST['inc_postcount'] : $forum['inc_postcount'] );
$form['forum_allow_rating'] = $this->ipsclass->adskin->form_yes_no('forum_allow_rating', $_POST['forum_allow_rating'] ? $_POST['forum_allow_rating'] : $forum['forum_allow_rating'] );
# Mod settings
$form['preview_posts'] = $this->ipsclass->adskin->form_dropdown("preview_posts" , $dd_moderate, $_POST['preview_posts'] ? $_POST['preview_posts'] : $forum['preview_posts'] );
$form['notify_modq_emails'] = $this->ipsclass->adskin->form_input( 'notify_modq_emails', $_POST['notify_modq_emails'] ? $_POST['notify_modq_emails'] : $forum['notify_modq_emails'] );
$form['password'] = $this->ipsclass->adskin->form_input( 'password' , $_POST['password'] ? $_POST['password'] : $forum['password'] );
# Sorting settings
$form['prune'] = $this->ipsclass->adskin->form_dropdown("prune" , $dd_prune, $_POST['prune'] ? $_POST['prune'] : $forum['prune'] );
$form['sort_key'] = $this->ipsclass->adskin->form_dropdown("sort_key" , $dd_order, $_POST['sort_key'] ? $_POST['sort_key'] : $forum['sort_key'] );
$form['sort_order'] = $this->ipsclass->adskin->form_dropdown("sort_order", $dd_by , $_POST['sort_order'] ? $_POST['sort_order'] : $forum['sort_order'] );
$form['topicfilter'] = $this->ipsclass->adskin->form_dropdown("topicfilter", $dd_filter , $_POST['topicfilter'] ? $_POST['topicfilter'] : $forum['topicfilter'] );
//-----------------------------------------
// Show permission matrix
//-----------------------------------------
if ( $type != 'edit' )
{
$perm_matrix = $this->build_group_perms( $forum['show_perms'], $forum['read_perms'], $forum['start_perms'], $forum['reply_perms'], $forum['upload_perms'] );
}
//-----------------------------------------
// Show form...
//-----------------------------------------
$this->ipsclass->html .= $this->html->forum_form( $form, $button, $code, $title, $button, $forum, $perm_matrix );
//-----------------------------------------
// Nav and print
//-----------------------------------------
$this->ipsclass->admin->nav[] = array( $this->ipsclass->form_code, 'Óïðàâëåíèå ôîðóìàìè' );
$this->ipsclass->admin->nav[] = array( '', 'Äîáàâèòü/Ðåäàêòèðîâàòü ôîðóì' );
$this->ipsclass->admin->output();
}
/*-------------------------------------------------------------------------*/
// Do save form
/*-------------------------------------------------------------------------*/
function forum_save($type='new')
{
//-----------------------------------------
// INIT
//-----------------------------------------
$this->ipsclass->input['name'] = trim($this->ipsclass->input['name']);
$this->ipsclass->input['f'] = intval($this->ipsclass->input['f']);
//-----------------------------------------
// Check
//-----------------------------------------
if ($this->ipsclass->input['name'] == "")
{
$this->ipsclass->main_msg = "Âû äîëæíû ââåñòè íàçâàíèå ôîðóìà";
$this->forum_form( $type );
return;
}
//-----------------------------------------
// Are we trying to do something stupid
// like running with scissors or moving
// the parent of a forum into itself
// spot?
//-----------------------------------------
if ( $this->ipsclass->input['parent_id'] != $this->ipsclass->forums->forum_by_id[ $this->ipsclass->input['f'] ]['parent_id'] )
{
$ids = $this->ipsclass->forums->forums_get_children( $this->ipsclass->input['f'] );
$ids[] = $this->ipsclass->input['f'];
if ( in_array( $this->ipsclass->input['parent_id'], $ids ) )
{
$this->ipsclass->main_msg = "Èçâèíèòå, ñäåëàòü ýòî íåâîçìîæíî. Âû õîòèòå ïåðåìåñòèòü ðîäèòåëüñêèé ôîðóìà â íåãî æå ñàìîãî. Ïîæàëóéñòà, âåðíèòåñü íàçàä è ïîïûòàéòåñü âûáðàòü äðóãîé ôîðóì.";
$this->forum_form( $type );
return;
}
}
//-----------------------------------------
// Save array
//-----------------------------------------
$save = array ( 'name' => $this->ipsclass->input['name'],
'description' => $this->ipsclass->my_nl2br( $this->ipsclass->txt_stripslashes($_POST['description']) ),
'use_ibc' => intval($this->ipsclass->input['use_ibc']),
'use_html' => intval($this->ipsclass->input['use_html']),
'status' => $this->ipsclass->input['status'],
'password' => $this->ipsclass->input['password'],
'sort_key' => $this->ipsclass->input['sort_key'],
'sort_order' => $this->ipsclass->input['sort_order'],
'prune' => $this->ipsclass->input['prune'],
'topicfilter' => $this->ipsclass->input['topicfilter'],
'preview_posts' => $this->ipsclass->input['preview_posts'],
'allow_poll' => intval($this->ipsclass->input['allow_poll']),
'allow_pollbump' => intval($this->ipsclass->input['allow_pollbump']),
'forum_allow_rating' => intval($this->ipsclass->input['forum_allow_rating']),
'inc_postcount' => intval($this->ipsclass->input['inc_postcount']),
'parent_id' => intval($this->ipsclass->input['parent_id']),
'sub_can_post' => intval($this->ipsclass->input['sub_can_post']),
'quick_reply' => intval($this->ipsclass->input['quick_reply']),
'redirect_on' => intval($this->ipsclass->input['redirect_on']),
'redirect_hits' => $this->ipsclass->input['redirect_hits'],
'redirect_url' => $this->ipsclass->input['redirect_url'],
'redirect_loc' => $this->ipsclass->input['redirect_loc'],
'notify_modq_emails' => $this->ipsclass->input['notify_modq_emails'],
'permission_showtopic' => $this->ipsclass->input['permission_showtopic'],
'permission_custom_error' => $this->ipsclass->my_nl2br( $this->ipsclass->txt_stripslashes($_POST['permission_custom_error']) ) );
//-----------------------------------------
// ADD
//-----------------------------------------
if ( $type == 'new' )
{
$this->ipsclass->DB->simple_construct( array( 'select' => 'MAX(id) as top_forum', 'from' => 'forums' ) );
$this->ipsclass->DB->simple_exec();
$row = $this->ipsclass->DB->fetch_row();
if ( $row['top_forum'] < 1 )
{
$row['top_forum'] = 0;
}
$row['top_forum']++;
$perms = $this->ipsclass->admin->compile_forum_perms();
$perm_array = addslashes(serialize(array(
'start_perms' => $perms['START'],
'reply_perms' => $perms['REPLY'],
'read_perms' => $perms['READ'],
'upload_perms' => $perms['UPLOAD'],
'show_perms' => $perms['SHOW']
) ) );
//-----------------------------------------
// Add to save array
//-----------------------------------------
$save['id'] = $row['top_forum'];
$save['position'] = $row['top_forum'];
$save['topics'] = 0;
$save['posts'] = 0;
$save['last_post'] = "";
$save['last_poster_id'] = "";
$save['last_poster_name'] = "";
$save['permission_array'] = $perm_array;
$this->ipsclass->DB->do_insert( 'forums', $save );
$this->ipsclass->main_msg = "Ôîðóì ñîçäàí";
$this->ipsclass->admin->save_log("Forum '{$this->ipsclass->input['name']}' created");
}
else
{
$this->ipsclass->DB->do_update( 'forums', $save, "id={$this->ipsclass->input['f']}" );
$this->ipsclass->main_msg = "Ôîðóì îòðåäàêòèðîâàí";
$this->ipsclass->admin->save_log("Ôîðóì '{$this->ipsclass->input['name']}' îòðåäàêòèðîâàí");
}
$this->recache_forums();
$this->ipsclass->input['f'] = "";
$this->ipsclass->forums->forums_init();
$this->show_forums();
}
/*-------------------------------------------------------------------------*/
// EDIT FORUM
/*-------------------------------------------------------------------------*/
function perm_edit_form()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$this->ipsclass->input['f'] = intval($this->ipsclass->input['f']);
//-----------------------------------------
// check..
//-----------------------------------------
if ( ! $this->ipsclass->input['f'] )
{
$this->ipsclass->admin->error("Âû íå âûáðàëè ôîðóì äëÿ ðåäàêòèðîâàíèÿ!");
}
//-----------------------------------------
// Get this forum details
//-----------------------------------------
$forum = $this->ipsclass->forums->forum_by_id[$this->ipsclass->input['f']];
//-----------------------------------------
// Next id...
//-----------------------------------------
$relative = $this->get_next_id( $this->ipsclass->input['f'] );
//-----------------------------------------
// check...
//-----------------------------------------
if ( ! $forum['id'] )
{
$this->ipsclass->admin->error("Íåëüçÿ èçâëå÷ü èç áàçû äàííûõ ID ôîðóìà {$this->ipsclass->input['f']}");
}
$this->ipsclass->admin->page_title = "Ðåäàêòèðîâàòü ïðàâà äëÿ ".$forum['name'];
$this->ipsclass->admin->page_detail = "<b>Óïðàâëåíèå ïðàâàìè äîñòóïà</b><br>(Ïðîâåðüòå ïîëÿ äëÿ äîñòóïà: åñëè ðàçðåøàåòå – ïîñòàâüòå ãàëî÷êó, çàïðåùàåòå – ñíèìèòå)<br>Åñëè âû çàïðåòèëè ÷òåíèå äëÿ ýòîé ãðóïïû, îíè íå óâèäÿò ýòîò ôîðóì";
//-----------------------------------------
// HTML
//-----------------------------------------
$perm_matrix = $this->build_group_perms( $forum['show_perms'], $forum['read_perms'], $forum['start_perms'], $forum['reply_perms'], $forum['upload_perms'],
$this->ipsclass->forums->forum_by_id[ $forum['parent_id'] ]['name'].' &gt; '.$forum['name'].' &gt; '."Óðîâåíü ïðàâ äîñòóïà" );
$this->ipsclass->html .= $this->html->forum_permission_form( $forum, $relative, $perm_matrix );
$this->ipsclass->admin->nav[] = array( $this->ipsclass->form_code, 'Óïðàâëåíèå ôîðóìàìè' );
$this->ipsclass->admin->nav[] = array( '', 'Äîñòóï íà ôîðóì äëÿ '.$forum['name'] );
$this->ipsclass->admin->output();
}
/*-------------------------------------------------------------------------*/
// Get next forum ID
/*-------------------------------------------------------------------------*/
function get_next_id($fid)
{
$nextid = 0;
$ids = array();
$index = 0;
$count = 0;
foreach( $this->ipsclass->forums->forum_cache['root'] as $id => $forum_data )
{
$ids[ $count ] = $forum_data['id'];
if ( $forum_data['id'] == $fid )
{
$index = $count;
}
$count++;
if ( is_array( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ] ) )
{
foreach( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ] as $id => $forum_data )
{
$children = $this->ipsclass->forums->forums_get_children( $forum_data['id'] );
$ids[ $count ] = $forum_data['id'];
if ( $forum_data['id'] == $fid )
{
$index = $count;
}
$count++;
if ( is_array($children) and count($children) )
{
foreach( $children as $kid )
{
$ids[ $count ] = $kid;
if ( $kid == $fid )
{
$index = $count;
}
$count++;
}
}
}
}
}
return array( 'next' => $ids[ $index + 1 ], 'previous' => $ids[ $index - 1 ] );
}
/*-------------------------------------------------------------------------*/
// RECACHE FORUMS
/*-------------------------------------------------------------------------*/
function recache_forums()
{
$this->ipsclass->update_forum_cache();
}
/*-------------------------------------------------------------------------*/
// SAVE PERM CHANGES
/*-------------------------------------------------------------------------*/
function perm_do_edit()
{
$perms = $this->ipsclass->admin->compile_forum_perms();
$this->ipsclass->DB->do_update( 'forums', array( 'permission_array' => addslashes(serialize(array(
'start_perms' => $perms['START'],
'reply_perms' => $perms['REPLY'],
'read_perms' => $perms['READ'],
'upload_perms' => $perms['UPLOAD'],
'show_perms' => $perms['SHOW']
) ) ) ), 'id='.$this->ipsclass->input['f']);
$this->ipsclass->admin->save_log("Èçìåíåíû ìàñêè äîñòóïà ê '{$this->ipsclass->input['name']}'");
$this->recache_forums();
if ( $this->ipsclass->input['doprevious'] and $this->ipsclass->input['previd'] > 0 )
{
$this->ipsclass->main_msg = 'Ìàñêè äîñòóïà èçìåíåíû';
$this->ipsclass->input['f'] = $this->ipsclass->input['previd'];
$this->ipsclass->boink_it( $this->ipsclass->base_url."&{$this->ipsclass->form_code}&code=pedit&f={$this->ipsclass->input['f']}" );
}
else if ( $this->ipsclass->input['donext'] and $this->ipsclass->input['nextid'] > 0 )
{
$this->ipsclass->main_msg = 'Ìàñêè äîñòóïà èçìåíåíû';
$this->ipsclass->input['f'] = $this->ipsclass->input['nextid'];
$this->ipsclass->boink_it( $this->ipsclass->base_url."&{$this->ipsclass->form_code}&code=pedit&f={$this->ipsclass->input['f']}" );
}
else if ( $this->ipsclass->input['reload'] )
{
$this->ipsclass->boink_it( $this->ipsclass->base_url."&{$this->ipsclass->form_code}&code=pedit&f={$this->ipsclass->input['f']}" );
}
else
{
$this->ipsclass->admin->done_screen("Ìàñêè äîñòóïà èçìåíåíû", "Óïðàâëåíèå ôîðóìàìè", $this->ipsclass->form_code, 'redirect' );
}
}
/*-------------------------------------------------------------------------*/
// RE-ORDER FORUMS
/*-------------------------------------------------------------------------*/
function reorder_form()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$temp_html = "";
$depth_guide = "";
//-----------------------------------------
// Check...
//-----------------------------------------
if ( ! $this->ipsclass->input['f'] )
{
$this->ipsclass->admin->error("Ïðîäîëæèòü íåëüçÿ, F íå ãîäåí");
}
$this->ipsclass->admin->page_detail = "Ýòà ñåêöèÿ ïîçâîëÿåò âàì èçìåíèòü ïîðÿäîê îòîáðàæåíèÿ (ñîðòèðîâêó) ôîðóìîâ è êàòåãîðèé, äîñòàòî÷íî ââåñòè ëèøü ïîðÿäêîâûé íîìåð äëÿ êàæäîãî ôîðóìà.";
$this->forumfunc->type = 'reorder';
$this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 1 => array( 'code' , 'doreorder' ),
2 => array( 'act' , 'forum' ),
3 => array( 'section', $this->ipsclass->section_code ),
) );
$cat_data = $this->ipsclass->forums->forum_by_id[ $this->ipsclass->input['f'] ];
if ( is_array( $this->ipsclass->forums->forum_cache[ $this->ipsclass->input['f'] ] ) )
{
foreach( $this->ipsclass->forums->forum_cache[ $this->ipsclass->input['f'] ] as $id => $forum_data )
{
$temp_html .= $this->forumfunc->render_forum($forum_data, $depth_guide);
$temp_html = $this->forumfunc->forum_build_children( $forum_data['id'], $temp_html, $depth_guide . $this->ipsclass->forums->depth_guide );
}
}
$this->ipsclass->html .= $this->forumfunc->forum_show_cat($temp_html, $cat_data);
$this->ipsclass->html .= $this->ipsclass->adskin->end_form_standalone("Ïåðåñîðòèðîâàòü");
$this->ipsclass->admin->output();
}
/*-------------------------------------------------------------------------*/
// Re order the root forums
/*-------------------------------------------------------------------------*/
function do_reorder()
{
$ids = array();
foreach ($this->ipsclass->input as $key => $value)
{
if ( preg_match( "/^f_(\d+)$/", $key, $match ) )
{
if ($this->ipsclass->input[$match[0]])
{
$ids[ $match[1] ] = $this->ipsclass->input[$match[0]];
}
}
}
//-----------------------------------------
// Save changes
//-----------------------------------------
if ( count($ids) )
{
foreach( $ids as $forum_id => $new_position )
{
$this->ipsclass->DB->do_update( 'forums', array( 'position' => intval($new_position) ), 'id='.$forum_id );
}
}
$this->recache_forums();
$this->ipsclass->boink_it( $this->ipsclass->base_url.'&'.$this->ipsclass->form_code );
}
/*-------------------------------------------------------------------------*/
// SHOW THE FORUMS WOOHOO, ETC
/*-------------------------------------------------------------------------*/
function show_forums()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$this->ipsclass->admin->page_title = "Óïðàâëåíèå ôîðóìàìè";
$this->ipsclass->admin->page_detail = "Â ýòîé ñåêöèè âû ìîæåòå ñîçäàâàòü íîâûå, èçìåíÿòü è óäàëÿòü ñóùåñòâóþùèå ôîðóìû. À òàêæå óñòàíàâëèâàòü ïðàâèëà è øàáëîíû äëÿ êàæäîãî ôîðóìà.";
//-----------------------------------------
// Nav
//-----------------------------------------
if ( $this->ipsclass->input['f'] )
{
$nav = $this->ipsclass->forums->forums_breadcrumb_nav($this->ipsclass->input['f'], '&'.$this->ipsclass->form_code.'&f=');
if ( is_array($nav) and count($nav) > 1 )
{
array_shift($nav);
$this->ipsclass->html .= "<div class='navstrip'><a href='{$this->ipsclass->base_url}&{$this->ipsclass->form_code}'>Ôîðóìû</a> &gt; ".implode( " &gt; ", $nav )."</div><br />";
}
}
//-----------------------------------------
// Grab the moderators
//-----------------------------------------
$this->forumfunc->moderators = array();
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'moderators' ) );
$this->ipsclass->DB->simple_exec();
while ($r = $this->ipsclass->DB->fetch_row())
{
$this->forumfunc->moderators[] = $r;
}
//-----------------------------------------
// Print screen
//-----------------------------------------
$this->forumfunc->type = 'manage';
$this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 1 => array( 'code' , 'doreordercat'),
2 => array( 'act' , 'forum' ),
3 => array( 'section', $this->ipsclass->section_code ),
) );
$this->ipsclass->html .= $this->html->render_forum_header();
$this->forumfunc->forums_list_forums();
$choose = "<select name='roots' class='realbutton'>";
foreach( $this->ipsclass->forums->forum_cache['root'] as $fid => $fdata )
{
$choose .= "<option value='{$fid}'>{$fdata['name']}</option>\n";
}
$choose .= "</select>";
//-----------------------------------------
// Member groups
//-----------------------------------------
$mem_group = "<select name='group' class='realbutton'>";
$this->ipsclass->DB->simple_construct( array( 'select' => 'g_id, g_title', 'from' => 'groups', 'order' => "g_title" ) );
$this->ipsclass->DB->simple_exec();
while ( $r = $this->ipsclass->DB->fetch_row() )
{
$mem_group .= "<option value='{$r['g_id']}'>{$r['g_title']}</option>\n";
}
$mem_group .= "</select>";
//-----------------------------------------
// Add footer
//-----------------------------------------
$this->ipsclass->html .= $this->html->render_forum_footer( $choose, $mem_group );
$this->ipsclass->admin->nav[] = array( '', 'Íàñòðîéêà ôîðóìîâ' );
$this->ipsclass->admin->output();
}
/*-------------------------------------------------------------------------*/
// Build group permissions
/*-------------------------------------------------------------------------*/
function build_group_perms( $show='*', $read='*', $write='*', $reply='*', $upload='*', $title="" )
{
//-----------------------------------------
// Load skin if required
//-----------------------------------------
if ( ! $this->html )
{
$this->html = $this->ipsclass->acp_load_template('cp_skin_forums');
}
//-----------------------------------------
// INIT
//-----------------------------------------
$global = array();
$perm = array();
$data = array();
$checked = "";
$check = " checked='checked'";
$content = "";
//-----------------------------------------
// GLOBALS
//-----------------------------------------
# SHOW FORUM
$checked = ($show == '*') ? $check : "";
$global['html_show'] = "<input type='checkbox' onclick='check_all(\"SHOW\")' name='SHOW_ALL' id='SHOW_ALL' value='1' {$checked}>\n";
# READ FORUM
$checked = ($read == '*') ? $check : "";
$global['html_read'] = "<input type='checkbox' onclick='check_all(\"READ\")' name='READ_ALL' id='READ_ALL' value='1' {$checked}>\n";
# REPLY FORUM
$checked = ($reply == '*') ? $check : "";
$global['html_reply'] = "<input type='checkbox' onclick='check_all(\"REPLY\")' name='REPLY_ALL' id='REPLY_ALL' value='1' {$checked}>\n";
# START TOPICS
$checked = ($write == '*') ? $check : "";
$global['html_start'] = "<input type='checkbox' onclick='check_all(\"START\")' name='START_ALL' id='START_ALL' value='1' {$checked}>\n";
# UPLOAD
$checked = ($upload == '*') ? $check : "";
$global['html_upload'] = "<input type='checkbox' onclick='check_all(\"UPLOAD\")' name='UPLOAD_ALL' id='UPLOAD_ALL' value='1' {$checked}>\n";
//-----------------------------------------
// Per mask settings
//-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'forum_perms', 'order' => "perm_name ASC" ) );
$this->ipsclass->DB->simple_exec();
while ( $data = $this->ipsclass->DB->fetch_row() )
{
# SHOW FORUM
$checked = ($show == '*' OR preg_match( "/(^|,)".$data['perm_id']."(,|$)/", $show ) ) ? $check : "";
$perm['html_show'] = "<input type='checkbox' name='SHOW_{$data['perm_id']}' id='SHOW_{$data['perm_id']}' value='1' {$checked} onclick=\"obj_checked('SHOW', '{$data['perm_id']}')\">";
# READ FORUM
$checked = ($read == '*' OR preg_match( "/(^|,)".$data['perm_id']."(,|$)/", $read ) ) ? $check : "";
$perm['html_read'] = "<input type='checkbox' name='READ_{$data['perm_id']}' id='READ_{$data['perm_id']}' value='1' {$checked} onclick=\"obj_checked('READ', '{$data['perm_id']}')\">";
# REPLY FORUM
$checked = ($reply == '*' OR preg_match( "/(^|,)".$data['perm_id']."(,|$)/", $reply ) ) ? $check : "";
$perm['html_reply'] = "<input type='checkbox' name='REPLY_{$data['perm_id']}' id='REPLY_{$data['perm_id']}' value='1' {$checked} onclick=\"obj_checked('REPLY', '{$data['perm_id']}')\">";
# WRITE FORUM
$checked = ($write == '*' OR preg_match( "/(^|,)".$data['perm_id']."(,|$)/", $write ) ) ? $check : "";
$perm['html_start'] = "<input type='checkbox' name='START_{$data['perm_id']}' id='START_{$data['perm_id']}' value='1' {$checked} onclick=\"obj_checked('START', '{$data['perm_id']}')\">";
# UPLOAD
$checked = ($upload == '*' OR preg_match( "/(^|,)".$data['perm_id']."(,|$)/", $upload ) ) ? $check : "";
$perm['html_upload'] = "<input type='checkbox' name='UPLOAD_{$data['perm_id']}' id='UPLOAD_{$data['perm_id']}' value='1' {$checked} onclick=\"obj_checked('UPLOAD', '{$data['perm_id']}')\">";
$content .= $this->html->render_forum_permissions_row( $perm, $data );
}
//-----------------------------------------
// Wrapper...
//-----------------------------------------
return $this->html->render_forum_permissions( $global, $content, $title );
}
}
?>