545 lines
16 KiB
PHP
545 lines
16 KiB
PHP
<?php
|
|
|
|
/*
|
|
+--------------------------------------------------------------------------
|
|
| Invision Power Board
|
|
| =============================================
|
|
| by Matthew Mecham
|
|
| (c) 2001 - 2006 Invision Power Services, Inc.
|
|
| http://www.invisionpower.com
|
|
| =============================================
|
|
| Web: http://www.invisionboard.com
|
|
| Licence Info: http://www.invisionboard.com/?license
|
|
+---------------------------------------------------------------------------
|
|
| > $Date: 2007-07-02 16:26:19 -0400 (Mon, 02 Jul 2007) $
|
|
| > $Revision: 1080 $
|
|
| > $Author: bfarber $
|
|
+---------------------------------------------------------------------------
|
|
|
|
|
| > Admin forum functions library
|
|
| > Script written by Matt Mecham
|
|
| > Date started: 19th November 2003
|
|
|
|
|
| > DBA Checked: Tue 25th May 2004
|
|
+--------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! defined( 'IN_ACP' ) )
|
|
{
|
|
print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded 'admin.php'.";
|
|
exit();
|
|
}
|
|
|
|
class admin_forum_functions
|
|
{
|
|
# Global
|
|
var $ipsclass;
|
|
|
|
# HTML
|
|
|
|
var $html;
|
|
|
|
var $type = "";
|
|
var $printed = 0;
|
|
var $show_all = 0;
|
|
var $skins = array();
|
|
var $need_desc = array();
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Forum - Build Children (of the CORN!!!)
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function forum_build_children($root_id, $temp_html="", $depth_guide="")
|
|
{
|
|
if ( isset($this->ipsclass->forums->forum_cache[ $root_id ]) AND is_array( $this->ipsclass->forums->forum_cache[ $root_id ] ) )
|
|
{
|
|
foreach( $this->ipsclass->forums->forum_cache[ $root_id ] as $forum_data )
|
|
{
|
|
if ( isset($this->ipsclass->vars['forum_cache_minimum']) AND $this->ipsclass->vars['forum_cache_minimum'] )
|
|
{
|
|
$forum_data['description'] = "<!--DESCRIPTION:{$forum_data['id']}-->";
|
|
$this->need_desc[] = $forum_data['id'];
|
|
}
|
|
|
|
$temp_html .= $this->render_forum($forum_data, $depth_guide);
|
|
|
|
$temp_html = $this->forum_build_children( $forum_data['id'], $temp_html, $depth_guide . $this->ipsclass->forums->depth_guide );
|
|
}
|
|
}
|
|
|
|
return $temp_html;
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Forum - Render forum entry (NOT of the CORN!!!)
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function render_forum($r, $depth_guide="")
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$desc = "";
|
|
$mod_string = "";
|
|
|
|
$r['skin_id'] = isset($r['skin_id']) ? $r['skin_id'] : '';
|
|
|
|
//-----------------------------------------
|
|
// Skin
|
|
//-----------------------------------------
|
|
|
|
if ( ! $this->html )
|
|
{
|
|
$this->html = $this->ipsclass->acp_load_template('cp_skin_forums');
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Manage forums?
|
|
//-----------------------------------------
|
|
|
|
if ( $this->type == 'manage' )
|
|
{
|
|
//-----------------------------------------
|
|
// Show main forums...
|
|
//-----------------------------------------
|
|
|
|
if ( ! $this->show_all )
|
|
{
|
|
$children = $this->ipsclass->forums->forums_get_children( $r['id'] );
|
|
|
|
$sub = array();
|
|
$subforums = "";
|
|
$count = 0;
|
|
|
|
//-----------------------------------------
|
|
// Build sub-forums link
|
|
//-----------------------------------------
|
|
|
|
if ( count($children) )
|
|
{
|
|
$r['name'] = "<a href='{$this->ipsclass->base_url}§ion=content&act=forum&f={$r['id']}'>".$r['name']."</a>";
|
|
|
|
foreach ( $children as $cid )
|
|
{
|
|
$count++;
|
|
|
|
$cfid = $cid;
|
|
|
|
if ( $count == count($children) )
|
|
{
|
|
//-----------------------------------------
|
|
// Last subforum, link to parent
|
|
// forum...
|
|
//-----------------------------------------
|
|
|
|
if ( !isset($children[ $count - 2 ]) OR ! $cfid = $children[ $count - 2 ] )
|
|
{
|
|
$cfid = $r['id'];
|
|
}
|
|
}
|
|
|
|
$sub[] = "<a href='{$this->ipsclass->base_url}§ion=content&act=forum&f={$this->ipsclass->forums->forum_by_id[$cid]['parent_id']}'>".$this->ipsclass->forums->forum_by_id[$cid]['name']."</a>";
|
|
}
|
|
}
|
|
|
|
if ( count( $sub ) )
|
|
{
|
|
$subforums = '<fieldset style="margin-top:4px"><legend>Subforums</legend>'.implode( ", ", $sub ).'</fieldset>';
|
|
}
|
|
|
|
$desc = "{$r['description']}{$subforums}";
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Moderators
|
|
//-----------------------------------------
|
|
|
|
$r['_modstring'] = "";
|
|
|
|
foreach( $this->moderators as $data )
|
|
{
|
|
if ( $data['forum_id'] == $r['id'] )
|
|
{
|
|
if ($data['is_group'] == 1)
|
|
{
|
|
$data['_fullname'] = 'Group: '.$data['group_name'];
|
|
}
|
|
else
|
|
{
|
|
$data['_fullname'] = $data['members_display_name'];
|
|
}
|
|
|
|
$r['_modstring'] .= $this->html->render_moderator_entry( $data );
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Print
|
|
//-----------------------------------------
|
|
|
|
$this->skins[$r['skin_id']] = (isset($this->skins[$r['skin_id']]) AND $this->skins[$r['skin_id']]) ? $this->skins[$r['skin_id']] : '';
|
|
|
|
return $this->html->render_forum_row( $desc, $r, $depth_guide, $this->skins[$r['skin_id']] );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// REORDER
|
|
//-----------------------------------------
|
|
|
|
else if ( $this->type == 'reorder' )
|
|
{
|
|
$this->printed++;
|
|
|
|
$no_root = count( $this->ipsclass->forums->forums_get_children($this->ipsclass->input['f']) );
|
|
|
|
$reorder = "<select id='realbutton' name='f_{$r['id']}'>";
|
|
|
|
for( $i = 1 ; $i <= $no_root ; $i++ )
|
|
{
|
|
$sel = "";
|
|
|
|
if ( $this->printed == $i )
|
|
{
|
|
$sel = 'selected="selected" ';
|
|
}
|
|
|
|
$reorder .= "\n<option value='$i'{$sel}>$i</option>";
|
|
}
|
|
|
|
$reorder .= "</select>\n";
|
|
|
|
return $this->html->render_reorder_row( $r, $reorder, $depth_guide );
|
|
}
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Forum - SHOW CAT(MEOW) (MEOW _ WOOF :&)
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function forum_show_cat($content, $r, $show_buttons=1, $show_reorder=0)
|
|
{
|
|
$this->printed++;
|
|
|
|
$no_root = count( $this->ipsclass->forums->forum_cache['root'] );
|
|
$reorder = "";
|
|
|
|
//-----------------------------------------
|
|
// Build reorder list
|
|
//-----------------------------------------
|
|
|
|
if ( $this->type != 'reorder' )
|
|
{
|
|
$reorder = "<select id='editbutton' name='f_{$r['id']}'>";
|
|
|
|
for( $i = 1 ; $i <= $no_root ; $i++ )
|
|
{
|
|
$sel = "";
|
|
|
|
if ( $this->printed == $i )
|
|
{
|
|
$sel = 'selected="selected" ';
|
|
}
|
|
|
|
$reorder .= "\n<option value='$i'{$sel}>$i</option>";
|
|
}
|
|
|
|
$reorder .= "</select>\n";
|
|
}
|
|
|
|
$this->ipsclass->html .= $this->html->forum_wrapper( $content, $r, $reorder, $show_buttons, $show_reorder );
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Forum - END CAT(MEOW) (MEOW _ WOOF MOO :&)
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function forum_end_cat($r=array())
|
|
{
|
|
// NO LONGER USED?
|
|
if ( $this->type == 'manage' )
|
|
{
|
|
$this->ipsclass->html .= $this->ipsclass->adskin->end_table();
|
|
}
|
|
else if ( $this->type == 'reorder' )
|
|
{
|
|
$this->ipsclass->html .= $this->ipsclass->adskin->end_table();
|
|
}
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// List all forums
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function forums_list_forums()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$this->show_all = intval($this->ipsclass->input['showall']);
|
|
|
|
if ( ! $this->html )
|
|
{
|
|
$this->html = $this->ipsclass->acp_load_template('cp_skin_forums');
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Manage forums
|
|
//-----------------------------------------
|
|
|
|
if ( $this->type == 'manage' )
|
|
{
|
|
foreach( $this->ipsclass->cache['skin_id_cache'] as $id => $data )
|
|
{
|
|
$this->skins[ $id ] = $data['set_name'];
|
|
}
|
|
}
|
|
|
|
$temp_html = "";
|
|
$fid = intval( $this->ipsclass->input['f'] );
|
|
|
|
//-----------------------------------------
|
|
// Show all forums
|
|
//-----------------------------------------
|
|
|
|
if ( $this->show_all )
|
|
{
|
|
foreach( $this->ipsclass->forums->forum_cache['root'] as $forum_data )
|
|
{
|
|
$cat_data = $forum_data;
|
|
$depth_guide = "";
|
|
$temp_html = "";
|
|
|
|
if ( isset($this->ipsclass->forums->forum_cache[ $forum_data['id'] ]) AND is_array( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ] ) )
|
|
{
|
|
foreach( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ] as $forum_data )
|
|
{
|
|
if ( isset($this->ipsclass->vars['forum_cache_minimum']) AND $this->ipsclass->vars['forum_cache_minimum'] )
|
|
{
|
|
$forum_data['description'] = "<!--DESCRIPTION:{$forum_data['id']}-->";
|
|
$this->need_desc[] = $forum_data['id'];
|
|
}
|
|
|
|
$temp_html .= $this->render_forum($forum_data, $depth_guide);
|
|
|
|
$temp_html = $this->forum_build_children( $forum_data['id'], $temp_html, '<span style="color:gray">|</span>'.$depth_guide . $this->ipsclass->forums->depth_guide );
|
|
}
|
|
}
|
|
|
|
if( !$temp_html )
|
|
{
|
|
$temp_html = $this->html->render_no_forums( $cat_data['id'] );
|
|
}
|
|
|
|
$this->ipsclass->html .= $this->forum_show_cat($temp_html, $cat_data);
|
|
unset($temp_html);
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Show root forums
|
|
//-----------------------------------------
|
|
|
|
else if ( ! $fid )
|
|
{
|
|
$seen_count = 0;
|
|
$total_items = 0;
|
|
|
|
foreach( $this->ipsclass->forums->forum_cache[ 'root' ] as $forum_data )
|
|
{
|
|
$cat_data = $forum_data;
|
|
$depth_guide = "";
|
|
$temp_html = "";
|
|
|
|
if ( isset($this->ipsclass->forums->forum_cache[ $forum_data['id'] ]) AND is_array( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ] ) )
|
|
{
|
|
foreach( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ] as $forum_data )
|
|
{
|
|
if ( isset($this->ipsclass->vars['forum_cache_minimum']) AND $this->ipsclass->vars['forum_cache_minimum'] )
|
|
{
|
|
$forum_data['description'] = "<!--DESCRIPTION:{$forum_data['id']}-->";
|
|
$this->need_desc[] = $forum_data['id'];
|
|
}
|
|
|
|
$temp_html .= $this->render_forum($forum_data, $depth_guide);
|
|
}
|
|
}
|
|
|
|
if( !$temp_html )
|
|
{
|
|
$temp_html = $this->html->render_no_forums( $cat_data['id'] );
|
|
}
|
|
|
|
$this->ipsclass->html .= $this->forum_show_cat($temp_html, $cat_data);
|
|
unset($temp_html);
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Show per ID forums
|
|
//-----------------------------------------
|
|
|
|
else
|
|
{
|
|
$cat_data = array();
|
|
$depth_guide = "";
|
|
|
|
|
|
if ( is_array( $this->ipsclass->forums->forum_cache[ $fid ] ) )
|
|
{
|
|
$cat_data = $this->ipsclass->forums->forum_by_id[ $fid ];
|
|
$depth_guide = "";
|
|
|
|
foreach( $this->ipsclass->forums->forum_cache[ $fid ] as $forum_data )
|
|
{
|
|
if ( isset($this->ipsclass->vars['forum_cache_minimum']) AND $this->ipsclass->vars['forum_cache_minimum'] )
|
|
{
|
|
$forum_data['description'] = "<!--DESCRIPTION:{$forum_data['id']}-->";
|
|
$this->need_desc[] = $forum_data['id'];
|
|
}
|
|
|
|
$temp_html .= $this->render_forum($forum_data, $depth_guide);
|
|
}
|
|
}
|
|
|
|
if( !$temp_html )
|
|
{
|
|
$temp_html = $this->html->render_no_forums( $cat_data['id'] );
|
|
}
|
|
|
|
$this->ipsclass->html .= $this->forum_show_cat( $temp_html, $this->ipsclass->forums->forum_by_id[ $fid ], 0, 1 );
|
|
unset($temp_html);
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Get descriptions?
|
|
//-----------------------------------------
|
|
|
|
if ( isset($this->ipsclass->vars['forum_cache_minimum']) AND $this->ipsclass->vars['forum_cache_minimum'] and count($this->need_desc) )
|
|
{
|
|
$this->ipsclass->DB->simple_construct( array( 'select' => 'id,description', 'from' => 'forums', 'where' => 'id IN('.implode( ',', $this->need_desc ) .')' ) );
|
|
$this->ipsclass->DB->simple_exec();
|
|
|
|
while( $r = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$this->ipsclass->html = str_replace( "<!--DESCRIPTION:{$r['id']}-->", $r['description'], $this->ipsclass->html );
|
|
}
|
|
}
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// forum jumpee
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function ad_forums_forum_list($restrict=0)
|
|
{
|
|
if ( $restrict != 1 )
|
|
{
|
|
//$jump_array[] = array( '-1', 'Make Root (Category)' );
|
|
}
|
|
else
|
|
{
|
|
$jump_array = array();
|
|
}
|
|
|
|
foreach( $this->ipsclass->forums->forum_cache['root'] as $forum_data )
|
|
{
|
|
$jump_array[] = array( $forum_data['id'], $forum_data['name'] );
|
|
|
|
$depth_guide = $this->ipsclass->forums->depth_guide;
|
|
|
|
if ( isset($this->ipsclass->forums->forum_cache[ $forum_data['id'] ]) AND is_array( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ] ) )
|
|
{
|
|
foreach( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ] as $forum_data )
|
|
{
|
|
$jump_array[] = array( $forum_data['id'], $depth_guide.$forum_data['name'] );
|
|
|
|
$jump_array = $this->forums_forum_list_internal( $forum_data['id'], $jump_array, $depth_guide . $this->ipsclass->forums->depth_guide );
|
|
}
|
|
}
|
|
}
|
|
|
|
return $jump_array;
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// INTERNAL
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function forums_forum_list_internal($root_id, $jump_array=array(), $depth_guide="")
|
|
{
|
|
if ( isset($this->ipsclass->forums->forum_cache[ $root_id ]) AND is_array( $this->ipsclass->forums->forum_cache[ $root_id ] ) )
|
|
{
|
|
foreach( $this->ipsclass->forums->forum_cache[ $root_id ] as $forum_data )
|
|
{
|
|
$jump_array[] = array( $forum_data['id'], $depth_guide.$forum_data['name'] );
|
|
|
|
$jump_array = $this->forums_forum_list_internal( $forum_data['id'], $jump_array, $depth_guide . $this->ipsclass->forums->depth_guide );
|
|
}
|
|
}
|
|
|
|
|
|
return $jump_array;
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// forum return data
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function ad_forums_forum_data()
|
|
{
|
|
foreach( $this->ipsclass->forums->forum_cache['root'] as $forum_data )
|
|
{
|
|
$forum_data['depthed_name'] = $forum_data['name'];
|
|
$forum_data['root_forum'] = 1;
|
|
|
|
$jump_array[ $forum_data['id'] ] = $forum_data;
|
|
|
|
$depth_guide = $this->ipsclass->forums->depth_guide;
|
|
|
|
if ( isset($this->ipsclass->forums->forum_cache[ $forum_data['id'] ]) AND is_array( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ] ) )
|
|
{
|
|
foreach( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ] as $forum_data )
|
|
{
|
|
$forum_data['depthed_name'] = $depth_guide.$forum_data['name'];
|
|
|
|
$jump_array[ $forum_data['id'] ] = $forum_data;
|
|
|
|
$jump_array = $this->forums_forum_data_internal( $forum_data['id'], $jump_array, $depth_guide . $this->ipsclass->forums->depth_guide );
|
|
}
|
|
}
|
|
}
|
|
|
|
return $jump_array;
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// INTERNAL
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function forums_forum_data_internal($root_id, $jump_array=array(), $depth_guide="")
|
|
{
|
|
if ( isset($this->ipsclass->forums->forum_cache[ $root_id ]) AND is_array( $this->ipsclass->forums->forum_cache[ $root_id ] ) )
|
|
{
|
|
foreach( $this->ipsclass->forums->forum_cache[ $root_id ] as $forum_data )
|
|
{
|
|
$forum_data['depthed_name'] = $depth_guide.$forum_data['name'];
|
|
|
|
$jump_array[ $forum_data['id'] ] = $forum_data;
|
|
|
|
$jump_array = $this->forums_forum_data_internal( $forum_data['id'], $jump_array, $depth_guide . $this->ipsclass->forums->depth_guide );
|
|
}
|
|
}
|
|
|
|
|
|
return $jump_array;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
?>
|