1363 lines
40 KiB
PHP
1363 lines
40 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: 2005-10-10 14:08:54 +0100 (Mon, 10 Oct 2005) $
|
|
| > $Revision: 23 $
|
|
| > $Author: matt $
|
|
+---------------------------------------------------------------------------
|
|
|
|
|
| > Email Error Logs Stuff
|
|
| > Module written by Matt Mecham
|
|
| > Date started: 7th April 2004
|
|
|
|
|
| > Module Version Number: 1.0.0
|
|
| > DBA Checked: Mon 24th May 2004
|
|
+--------------------------------------------------------------------------
|
|
*/
|
|
|
|
/**
|
|
* ACP MODULE: ACP Permissions
|
|
*
|
|
* Manage ACP permissions
|
|
*
|
|
* @package InvisionPowerBoard
|
|
* @subpackage ActionAdmin
|
|
* @author Matt Mecham
|
|
* @version 2.1
|
|
* @since 2.1.0.2005-07-08
|
|
*/
|
|
|
|
/**
|
|
*
|
|
*/
|
|
if ( ! defined( 'IN_ACP' ) )
|
|
{
|
|
print "<h1>Íåâåðíûé âõîä</h1> Ó Âàñ íåò äîñòóïà ê äèðåêòèâå ýòîãî ôàéëà. Åñëè Âû ïðîâîäèëè îáíîâëåíèÿ, óáåäèòåñü, ÷òî íå çàáûëè îáíîâèòü 'admin.php'.";
|
|
exit();
|
|
}
|
|
|
|
/**
|
|
* ACP MODULE: ACP Permissions
|
|
*
|
|
* Manage ACP permissions
|
|
*
|
|
* @package InvisionPowerBoard
|
|
* @subpackage ActionAdmin
|
|
* @author Matt Mecham
|
|
* @version 2.1
|
|
* @since 2.1.0.2005-07-08
|
|
*/
|
|
class ad_acppermissions
|
|
{
|
|
/**
|
|
* Member info array
|
|
*
|
|
* @var array
|
|
*/
|
|
var $member_info = array();
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// AUTO 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);
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Make sure we're a root admin, or else!
|
|
//-----------------------------------------
|
|
|
|
if ( $this->ipsclass->member['mgroup'] != $this->ipsclass->vars['admin_group'] )
|
|
{
|
|
$this->ipsclass->admin->error("Èçâèíèòå, íî ýòè ôóíêöèè òîëüêî äëÿ ãëàâíûõ àäìèíèñòðàòîðîâ");
|
|
}
|
|
|
|
$this->html = $this->ipsclass->acp_load_template('cp_skin_admin');
|
|
|
|
//-----------------------------------------
|
|
// What to do?
|
|
//-----------------------------------------
|
|
|
|
switch( $this->ipsclass->input['code'] )
|
|
{
|
|
case 'acpperms-list':
|
|
$this->acpperms_list();
|
|
break;
|
|
|
|
case 'acpperms-dev-source-to-xml':
|
|
$this->acpperms_dev_source_to_xml();
|
|
break;
|
|
case 'acpperms-dev-report-missing':
|
|
$this->acpperms_dev_report_missing();
|
|
break;
|
|
case 'acpperms-dev-report-language':
|
|
$this->acpperms_dev_report_language();
|
|
break;
|
|
|
|
case 'accperms-xml-import':
|
|
$this->acpperms_xml_import();
|
|
break;
|
|
|
|
case 'acpperms-member-add':
|
|
$this->acpperms_member_add();
|
|
break;
|
|
case 'acpperms-member-add-complete':
|
|
$this->acpperms_member_add_complete();
|
|
break;
|
|
case 'accperms-member-remove':
|
|
$this->accperms_member_remove();
|
|
break;
|
|
|
|
case 'acpperms-xml-display':
|
|
$this->acpperms_xml_display();
|
|
break;
|
|
|
|
case 'acpperms-xml-save-tabs':
|
|
$this->acpperms_xml_save( 'tabs' );
|
|
break;
|
|
|
|
case 'acpperms-xml-save-group':
|
|
$this->acpperms_xml_save( 'group' );
|
|
break;
|
|
|
|
case 'acpperms-xml-save-mainbit':
|
|
$this->acpperms_xml_save( 'mainbit' );
|
|
break;
|
|
case 'acpperms-xml-save-bits':
|
|
$this->acpperms_xml_save( 'bits' );
|
|
break;
|
|
|
|
default:
|
|
$this->acpperms_list();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// ACP Perms: Remove member (and call him names)
|
|
/*-------------------------------------------------------------------------*/
|
|
/**
|
|
* ACP Perms: XML display screen (depending on tab and other input)
|
|
*
|
|
* @return void
|
|
* @since 2.1.0.2005-7-11
|
|
*/
|
|
function accperms_member_remove()
|
|
{
|
|
//-------------------------------
|
|
// INIT
|
|
//-------------------------------
|
|
|
|
$member_id = intval( $this->ipsclass->input['mid'] );
|
|
|
|
//-------------------------------
|
|
// Check...
|
|
//-------------------------------
|
|
|
|
if ( ! $member_id )
|
|
{
|
|
$this->ipsclass->main_msg = "ID ïîëüçîâàòåëÿ íå âûáðàí!";
|
|
}
|
|
|
|
//-------------------------------
|
|
// Remove member's row
|
|
//-------------------------------
|
|
|
|
$this->ipsclass->DB->build_and_exec_query( array( 'delete' => 'admin_permission_rows', 'where' => 'row_member_id='.$member_id ) );
|
|
|
|
//-------------------------------
|
|
// Print
|
|
//-------------------------------
|
|
|
|
$this->ipsclass->main_msg = "Îãðàíè÷åíèÿ äîñòóïà óäàëåíû";
|
|
$this->acpperms_list();
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// ACP Perms: XML Display
|
|
/*-------------------------------------------------------------------------*/
|
|
/**
|
|
* ACP Perms: XML display screen (depending on tab and other input)
|
|
*
|
|
* @return void
|
|
* @since 2.1.0.2005-7-11
|
|
*/
|
|
function acpperms_xml_save( $type='tabs' )
|
|
{
|
|
//-------------------------------
|
|
// INIT
|
|
//-------------------------------
|
|
|
|
$this->member_id = intval( $this->ipsclass->input['member_id'] );
|
|
$this->tab = trim( $this->ipsclass->input['tab'] ) ? trim( $this->ipsclass->input['tab'] ) : trim( $this->ipsclass->input['perm_main'] );
|
|
$this->perm_main = $this->tab;
|
|
$this->perm_child = trim( $this->ipsclass->input['perm_child'] );
|
|
$this->member_info = array();
|
|
|
|
//-------------------------------
|
|
// Check...
|
|
//-------------------------------
|
|
|
|
if ( ! $this->member_id )
|
|
{
|
|
exit();
|
|
}
|
|
|
|
//-------------------------------
|
|
// Get Member info
|
|
//-------------------------------
|
|
|
|
$this->ipsclass->DB->build_query( array( 'select' => 'p.*',
|
|
'from' => array( 'admin_permission_rows' => 'p' ),
|
|
'where' => 'p.row_member_id='.$this->member_id,
|
|
'add_join' => array( 0 => array(
|
|
'select' => 'm.*',
|
|
'from' => array( 'members' => 'm' ),
|
|
'where' => 'm.id=p.row_member_id',
|
|
'type' => 'inner' ) ),
|
|
'order' => 'm.members_display_name DESC' ) );
|
|
|
|
$this->ipsclass->DB->exec_query();
|
|
|
|
$this->member_info = $this->ipsclass->DB->fetch_row();
|
|
|
|
//-------------------------------
|
|
// Unpack array
|
|
//-------------------------------
|
|
|
|
$this->member_info['_perm_cache'] = unserialize( $this->member_info['row_perm_cache'] );
|
|
|
|
//-------------------------------
|
|
// What up?
|
|
//-------------------------------
|
|
|
|
switch( $type )
|
|
{
|
|
case 'tabs':
|
|
$this->member_info['_perm_cache'][ $this->perm_main ] = intval( $this->ipsclass->input['result'] );
|
|
break;
|
|
case 'mainbit':
|
|
$this->member_info['_perm_cache'][ $this->perm_main.':'.$this->perm_child ] = intval( $this->ipsclass->input['result'] );
|
|
break;
|
|
case 'bits':
|
|
//-------------------------------
|
|
// Get bits to save...
|
|
//-------------------------------
|
|
|
|
foreach( $_REQUEST as $key => $value )
|
|
{
|
|
if ( preg_match( "#^pbfs_(.+?)$#i", $key, $match ) )
|
|
{
|
|
if ( $match[1] )
|
|
{
|
|
$_bit = $match[1];
|
|
$_bitvalue = intval( $this->ipsclass->input[ $match[0] ] );
|
|
|
|
$this->member_info['_perm_cache'][ $this->perm_main.':'.$this->perm_child.':'.$_bit ] = intval( $_bitvalue );
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 'group':
|
|
//-------------------------------
|
|
// Allow perms to this bit
|
|
//-------------------------------
|
|
$this->member_info['_perm_cache'][ $this->perm_main.':'.$this->perm_child ] = intval( $this->ipsclass->input['result'] );
|
|
|
|
//-------------------------------
|
|
// Get bits from DB
|
|
//-------------------------------
|
|
|
|
$this->ipsclass->DB->build_query( array( 'select' => '*', 'from' => 'admin_permission_keys', 'where' => "perm_main='{$this->perm_main}' AND perm_child='{$this->perm_child}'" ) );
|
|
$this->ipsclass->DB->exec_query();
|
|
|
|
while ( $r = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
if ( $r['perm_main'] AND $r['perm_child'] AND $r['perm_bit'] )
|
|
{
|
|
$this->member_info['_perm_cache'][ $r['perm_main'].':'.$r['perm_child'].':'.$r['perm_bit'] ] = intval( $this->ipsclass->input['result'] );
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
$this->ipsclass->DB->do_update( 'admin_permission_rows', array( 'row_perm_cache' => serialize( $this->member_info['_perm_cache'] ),
|
|
'row_updated' => time() ), 'row_member_id='.$this->member_id );
|
|
|
|
//-------------------------------
|
|
// Print
|
|
//-------------------------------
|
|
|
|
$this->acpperms_xml_display();
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// ACP Perms: XML Display
|
|
/*-------------------------------------------------------------------------*/
|
|
/**
|
|
* ACP Perms: XML display screen (depending on tab and other input)
|
|
*
|
|
* @return void
|
|
* @since 2.1.0.2005-7-11
|
|
*/
|
|
function acpperms_xml_display()
|
|
{
|
|
//-------------------------------
|
|
// INIT
|
|
//-------------------------------
|
|
|
|
$this->member_id = intval( $this->ipsclass->input['member_id'] );
|
|
$this->tab = trim( $this->ipsclass->input['tab'] ) ? trim( $this->ipsclass->input['tab'] ) : trim( $this->ipsclass->input['perm_main'] );
|
|
$this->func = trim( $this->ipsclass->input['func'] );
|
|
$this->perm_main = $this->tab;
|
|
$this->perm_child = trim( $this->ipsclass->input['perm_child'] );
|
|
$this->lang = array();
|
|
$this->member_info = array();
|
|
$tab_html = '';
|
|
$content = '';
|
|
$tabinit = array();
|
|
|
|
//-------------------------------
|
|
// Check...
|
|
//-------------------------------
|
|
|
|
if ( ! $this->member_id )
|
|
{
|
|
exit();
|
|
}
|
|
|
|
//-------------------------------
|
|
// Get lang: NEEDS SORTIN'
|
|
//-------------------------------
|
|
|
|
require_once( ROOT_PATH."cache/lang_cache/ru/acp_lang_acpperms.php" );
|
|
$this->lang = $lang;
|
|
|
|
//-------------------------------
|
|
// Get Member info
|
|
//-------------------------------
|
|
|
|
$this->ipsclass->DB->build_query( array( 'select' => 'p.*',
|
|
'from' => array( 'admin_permission_rows' => 'p' ),
|
|
'where' => 'p.row_member_id='.$this->member_id,
|
|
'add_join' => array( 0 => array(
|
|
'select' => 'm.*',
|
|
'from' => array( 'members' => 'm' ),
|
|
'where' => 'm.id=p.row_member_id',
|
|
'type' => 'inner' ) ),
|
|
'order' => 'm.members_display_name DESC' ) );
|
|
|
|
$this->ipsclass->DB->exec_query();
|
|
|
|
$this->member_info = $this->ipsclass->DB->fetch_row();
|
|
|
|
//-------------------------------
|
|
// Unpack array
|
|
//-------------------------------
|
|
|
|
$this->member_info['_perm_cache'] = unserialize( $this->member_info['row_perm_cache'] );
|
|
|
|
//-------------------------------
|
|
// Build tab HTML
|
|
//-------------------------------
|
|
|
|
$onoff['content'] = 'taboff';
|
|
$onoff['lookandfeel'] = 'taboff';
|
|
$onoff['tools'] = 'taboff';
|
|
$onoff['components'] = 'taboff';
|
|
$onoff['admin'] = 'taboff';
|
|
|
|
$onoff[ $this->tab ] = 'tabon';
|
|
|
|
foreach( $onoff as $t => $s )
|
|
{
|
|
$tabinit[ $t ] = intval($this->member_info['_perm_cache'][ $t ]);
|
|
}
|
|
|
|
$tab_html = $this->html->acp_xml_tabs( $onoff, $this->member_id, $tabinit );
|
|
|
|
//-------------------------------
|
|
// What to do?
|
|
//-------------------------------
|
|
|
|
if ( $this->perm_main )
|
|
{
|
|
//-------------------------------
|
|
// Show side menu w/ global opt
|
|
//-------------------------------
|
|
|
|
if ( $this->member_info['_perm_cache'][ $this->perm_main ] )
|
|
{
|
|
$content = $this->acpperms_xml_show_global();
|
|
}
|
|
else
|
|
{
|
|
$content = $this->html->acp_xml_tab_no_access( $this->member_info );
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
//-------------------------------
|
|
// Show welcome screen
|
|
//-------------------------------
|
|
|
|
$content = $this->acpperms_xml_show_welcome();
|
|
|
|
}
|
|
|
|
//-------------------------------
|
|
// Print
|
|
//-------------------------------
|
|
|
|
@header( "Content-type: text/plain;charset=WINDOWS-1251" );
|
|
print $this->html->acp_xml_wrap( $tab_html, $content );
|
|
exit();
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// ACP Perms: XML Display: Global
|
|
/*-------------------------------------------------------------------------*/
|
|
/**
|
|
* ACP Perms: XML display screen [ GLOBAL ]
|
|
*
|
|
* @return void
|
|
* @since 2.1.0.2005-7-8
|
|
*/
|
|
function acpperms_xml_show_global()
|
|
{
|
|
//-------------------------------
|
|
// INIT
|
|
//-------------------------------
|
|
|
|
$content = '';
|
|
$sidebar = '';
|
|
$sidebar_content = '';
|
|
$rows = array();
|
|
$bits = array();
|
|
$menu_data = array();
|
|
$main = '';
|
|
$main_content = '';
|
|
$main_img_classes = array( 'tick' => 'img-boxed-off', 'cross' => 'img-boxed-off' );
|
|
$lang_map = array( 'add' => 'Ðàçðåøèòü ÄÎÁÀÂËßÒÜ ïðàâà äîñòóïà',
|
|
'edit' => 'Ðàçðåøèòü ÐÅÄÀÊÒÈÐÎÂÀÒÜ ïðàâà äîñòóïà',
|
|
'remove' => 'Ðàçðåøèòü ÓÄÀËßÒÜ ïðàâà äîñòóïà',
|
|
'import' => 'Ðàçðåøèòü ÈÌÏÎÐÒÈÐÎÂÀÒÜ ïðàâà äîñòóïà',
|
|
'export' => 'Ðàçðåøèòü ÝÊÑÏÎÐÒÈÐÎÂÀÒÜ ïðàâà äîñòóïà',
|
|
'rebuild' => 'Ðàçðåøèòü ÏÅÐÅÑÒÐÀÈÂÀÒÜ ïðàâà äîñòóïà',
|
|
'recount' => 'Ðàçðåøèòü ÏÅÐÅÑ×ÈÒÛÂÀÒÜ ïðàâà äîñòóïà',
|
|
'recache' => 'Ðàçðåøèòü ÊÅØÈÐÎÂÀÒÜ ïðàâà äîñòóïà',
|
|
'view' => 'Ðàçðåøèòü ÏÐÎÑÌÀÒÐÈÂÀÒÜ ïðàâà äîñòóïà',
|
|
'search' => 'Ðàçðåøèòü îñóùåñòâëÿòü ÏÎÈÑÊ ïî ïðàâàì äîñòóïà',
|
|
'log' => 'Ðàçðåøèòü ÓÏÐÀÂËßÒÜ ËÎÃÀÌÈ ïðàâ äîñòóïà',
|
|
'show' => 'Ðàçðåøèòü ÏÐÎÑÌÀÒÐÈÂÀÒÜ ÎÑÍÎÂÛÍÛÅ ïðàâà äîñòóïà',
|
|
'upload' => "Ðàçðåøèòü ÇÀÃÐÓÆÀÒÜ ïðàâà äîñòóïà",
|
|
);
|
|
|
|
//-------------------------------
|
|
// Not components?
|
|
//-------------------------------
|
|
|
|
if ( $this->perm_main != 'components' )
|
|
{
|
|
//-------------------------------
|
|
// Get all groups with this tab
|
|
//-------------------------------
|
|
|
|
$this->ipsclass->DB->cache_add_query( 'acpperms_get_main_groups', array( 'perm_main' => $this->perm_main ) );
|
|
$this->ipsclass->DB->cache_exec_query();
|
|
|
|
//-------------------------------
|
|
// Loop through and build side
|
|
//-------------------------------
|
|
|
|
while ( $r = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$rows[] = $r;
|
|
|
|
if ( ! $this->perm_child )
|
|
{
|
|
//-------------------------------
|
|
// Just set up the default one
|
|
//-------------------------------
|
|
|
|
$this->perm_child = $r['perm_child'];
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//-------------------------------
|
|
// Get component menus
|
|
//-------------------------------
|
|
|
|
$this->ipsclass->DB->simple_construct( array( 'select' => '*',
|
|
'from' => 'components',
|
|
'where' => 'com_enabled=1',
|
|
'order' => 'com_position ASC' ) );
|
|
$this->ipsclass->DB->simple_exec();
|
|
|
|
while( $com = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$menu_data[ $com['com_section'] ] = unserialize( $com['com_menu_data'] );
|
|
|
|
if ( is_array( $menu_data[ $com['com_section'] ] ) and count( $menu_data[ $com['com_section'] ] ) )
|
|
{
|
|
if ( ! $this->perm_child )
|
|
{
|
|
$this->perm_child = $com['com_section'];
|
|
}
|
|
|
|
//-------------------------------
|
|
// Populate rows
|
|
//-------------------------------
|
|
|
|
$rows[] = array( 'perm_main' => 'components',
|
|
'perm_child' => $com['com_section'] );
|
|
|
|
$this->lang[ 'components:'.$com['com_section'] ] = $com['com_title'];
|
|
}
|
|
}
|
|
}
|
|
|
|
//-------------------------------
|
|
// Go froo the rows
|
|
//-------------------------------
|
|
|
|
foreach( $rows as $r )
|
|
{
|
|
$key = $r['perm_main'].':'.$r['perm_child'];
|
|
$lang_bit = $this->lang[ $key ];
|
|
|
|
$sidebar_content .= $this->perm_child == $r['perm_child'] ? $this->html->acp_xml_global_sidebar_link_chosen( $lang_bit, $this->member_id, $r['perm_main'], $r['perm_child'], intval($this->member_info['_perm_cache'][ $key ]) )
|
|
: $this->html->acp_xml_global_sidebar_link( $lang_bit, $this->member_id, $r['perm_main'], $r['perm_child'], intval($this->member_info['_perm_cache'][ $key ]) );
|
|
}
|
|
|
|
$sidebar = $this->html->acp_xml_global_sidebar_wrap( $sidebar_content );
|
|
|
|
//-------------------------------
|
|
// Get main content
|
|
//-------------------------------
|
|
|
|
$main_value = intval( $this->member_info['_perm_cache'][ $this->perm_main .':'. $this->perm_child ] );
|
|
$main_class = $main_value ? 'perms-green' : 'perms-red';
|
|
|
|
//-------------------------------
|
|
// Not components?
|
|
//-------------------------------
|
|
|
|
if ( $this->perm_main != 'components' )
|
|
{
|
|
$this->ipsclass->DB->build_query( array( 'select' => '*',
|
|
'from' => 'admin_permission_keys',
|
|
'where' => "perm_main='{$this->perm_main}' AND perm_child='{$this->perm_child}'",
|
|
'order' => 'perm_bit ASC' ) );
|
|
|
|
$this->ipsclass->DB->exec_query();
|
|
|
|
while ( $bit = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$bits[] = $bit;
|
|
}
|
|
}
|
|
//-------------------------------
|
|
// IS components
|
|
//-------------------------------
|
|
else
|
|
{
|
|
foreach( $menu_data[ $this->perm_child ] as $idx => $menu_array )
|
|
{
|
|
if ( $menu_array['menu_permbit'] )
|
|
{
|
|
$bits[] = array( 'perm_main' => 'components',
|
|
'perm_child' => $this->perm_child,
|
|
'perm_bit' => $menu_array['menu_permbit'] );
|
|
|
|
if ( $menu_array['menu_permlang'] )
|
|
{
|
|
$this->lang[ 'components:'.$this->perm_child.':'.$menu_array['menu_permbit'] ] = $menu_array['menu_permlang'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//-------------------------------
|
|
// Loop and print
|
|
//-------------------------------
|
|
|
|
foreach( $bits as $hehe => $bit )
|
|
{
|
|
$img_classes = array( 'tick' => 'img-boxed-off', 'cross' => 'img-boxed-off' );
|
|
|
|
# Set up key perm_main:perm_child:perm_bit
|
|
$key = $this->perm_main.':'.$this->perm_child.':'.$bit['perm_bit'];
|
|
|
|
# Got a specific language entry? Use it
|
|
$lang_bit = $this->lang[ $key ] ? $this->lang[ $key ] : $lang_map[ $bit['perm_bit'] ];
|
|
|
|
# Got a row in the DB matching KEY?
|
|
$value = intval( $this->member_info['_perm_cache'][ $key ] );
|
|
|
|
# Set up BG class for perm bit
|
|
$class = $value ? 'perms-green' : 'perms-red';
|
|
|
|
# Set up BG class again... actually enabled this bit yet?
|
|
$class = $main_value ? $class : 'perms-gray';
|
|
|
|
# Img classes - cross or ticked?
|
|
$value ? $img_classes['tick'] = 'img-boxed' : $img_classes['cross'] = 'img-boxed';
|
|
|
|
$main_content .= $this->html->acp_xml_global_main_row( $lang_bit, $bit['perm_bit'], $value, $class, $img_classes );
|
|
}
|
|
|
|
//-------------------------------
|
|
// Set up main-wrap contents
|
|
//-------------------------------
|
|
|
|
# Img classes - cross or ticked?
|
|
$main_value ? $main_img_classes['tick'] = 'img-boxed' : $main_img_classes['cross'] = 'img-boxed';
|
|
|
|
$main = $this->html->acp_xml_global_main_wrap( $main_content, $main_class, $main_value, $main_img_classes );
|
|
|
|
//-------------------------------
|
|
// Print it
|
|
//-------------------------------
|
|
|
|
return $this->html->acp_xml_main_wrap( $sidebar, $main );
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// ACP Perms: XML Display: Welcome
|
|
/*-------------------------------------------------------------------------*/
|
|
/**
|
|
* ACP Perms: XML display screen [ WELCOME ]
|
|
*
|
|
* @return void
|
|
* @since 2.1.0.2005-7-8
|
|
*/
|
|
function acpperms_xml_show_welcome()
|
|
{
|
|
//-------------------------------
|
|
// INIT
|
|
//-------------------------------
|
|
|
|
$content = '';
|
|
|
|
//-------------------------------
|
|
// Check...
|
|
//-------------------------------
|
|
|
|
return $this->html->acp_xml_welcome( $this->member_info );
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// ACP Perms: Add member complete
|
|
/*-------------------------------------------------------------------------*/
|
|
/**
|
|
* ACP Perms: Add member complete
|
|
*
|
|
* Checks input, adds row to DB if OK
|
|
*
|
|
* @return void
|
|
* @since 2.1.0.2005-7-8
|
|
*/
|
|
function acpperms_member_add_complete()
|
|
{
|
|
//-------------------------------
|
|
// INIT
|
|
//-------------------------------
|
|
|
|
$name = trim( $this->ipsclass->input['entered_name'] );
|
|
$isok = 0;
|
|
|
|
//-------------------------------
|
|
// Check...
|
|
//-------------------------------
|
|
|
|
if ( ! $name )
|
|
{
|
|
$this->ipsclass->main_msg = "Âû äîëæíû ââåñòè èìÿ, ïåðåä òåì, êàê ïîäòâåðäèòå ôîðìó.";
|
|
$this->acpperms_member_add();
|
|
}
|
|
|
|
//-------------------------------
|
|
// Get member...
|
|
//-------------------------------
|
|
|
|
$this->ipsclass->DB->cache_add_query( 'login_getmember_by_dname', array( 'username' => strtolower($name) ) );
|
|
$this->ipsclass->DB->cache_exec_query();
|
|
|
|
$member = $this->ipsclass->DB->fetch_row();
|
|
|
|
//-------------------------------
|
|
// Check...
|
|
//-------------------------------
|
|
|
|
if ( ! $member['id'] )
|
|
{
|
|
$this->ipsclass->main_msg = "{$name} íå áûë íàéäåí.";
|
|
$this->acpperms_member_add();
|
|
}
|
|
|
|
//-------------------------------
|
|
// Already got 'em
|
|
//-------------------------------
|
|
|
|
$test = $this->ipsclass->DB->build_and_exec_query( array( 'select' => 'row_member_id', 'from' => 'admin_permission_rows', 'where' => 'row_member_id='.$member['id'] ) );
|
|
|
|
if ( $test['row_member_id'] )
|
|
{
|
|
$this->ipsclass->main_msg = "{$name} óæå îãðà÷è÷åí.";
|
|
$this->acpperms_member_add();
|
|
}
|
|
|
|
//-------------------------------
|
|
// Is Root admin?
|
|
//-------------------------------
|
|
|
|
if ( $this->ipsclass->vars['admin_group'] == $member['mgroup'] )
|
|
{
|
|
$this->ipsclass->main_msg = "{$name}'s íàõîäèòñÿ â îñíîâíîé ãðóïïå àäìèíèñòðàòîðîâ è íå ìîæåò áûòü îãðàíè÷åí â ïðàâàõ.";
|
|
$this->acpperms_member_add();
|
|
}
|
|
|
|
//-------------------------------
|
|
// Primary ACP group?
|
|
//-------------------------------
|
|
|
|
if ( $this->ipsclass->cache['group_cache'][ $member['mgroup'] ]['g_access_cp'] )
|
|
{
|
|
$isok = 1;
|
|
}
|
|
//-------------------------------
|
|
// Secondary ACP group?
|
|
//-------------------------------
|
|
else if ( $member['mgroup_others'] )
|
|
{
|
|
foreach( explode( ',', $member['mgroup_others'] ) as $gid )
|
|
{
|
|
if ( $this->ipsclass->cache['group_cache'][ $gid ]['g_access_cp'] )
|
|
{
|
|
$isok = 1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//-------------------------------
|
|
// Not oK?
|
|
//-------------------------------
|
|
|
|
if ( ! $isok )
|
|
{
|
|
$this->ipsclass->main_msg = "{$member['members_display_name']} íå èìååò äîñòóïà â àäìèíöåíòð è íå ìîæåò áûòü äîáàâëåí.";
|
|
$this->acpperms_member_add();
|
|
}
|
|
|
|
//-------------------------------
|
|
// A-OK
|
|
//-------------------------------
|
|
|
|
$this->ipsclass->DB->build_and_exec_query( array( 'delete' => 'admin_permission_rows', 'where' => 'row_member_id='.$member['id'] ) );
|
|
|
|
$this->ipsclass->DB->do_insert( 'admin_permission_rows', array( 'row_member_id' => $member['id'],
|
|
'row_perm_cache' => serialize( array() ),
|
|
'row_updated' => time() ) );
|
|
|
|
$this->ipsclass->main_msg = "{$member['members_display_name']} óñïåøíî äîáàâëåí è ñåé÷àñ íå èìååò äîñòóïà ê àäìèíöåíòð, íî âû ìîæåòå äàòü åìó ïðàâà ÷åðåç óïðàâëåíèå îãðàíè÷åíèÿìè.";
|
|
$this->acpperms_list();
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// ACP Perms: Add member form
|
|
/*-------------------------------------------------------------------------*/
|
|
/**
|
|
* ACP Perms: Add member form
|
|
*
|
|
* Shows form asking for input
|
|
*
|
|
* @return void
|
|
* @since 2.1.0.2005-7-7
|
|
*/
|
|
function acpperms_member_add()
|
|
{
|
|
$this->ipsclass->admin->nav[] = array( $this->ipsclass->form_code, 'Óïðàâëåíèå îãðàíè÷åíèÿìè' );
|
|
$this->ipsclass->admin->nav[] = array( '' , 'Äîáàâèòü àäìèíèñòðàòîðà' );
|
|
|
|
//-------------------------------
|
|
// INIT
|
|
//-------------------------------
|
|
|
|
//-------------------------------
|
|
// Show the form
|
|
//-------------------------------
|
|
|
|
$this->ipsclass->html .= $this->html->acp_perms_add_admin_form();
|
|
|
|
$this->ipsclass->admin->page_title = "Îãðàíè÷åíèå àäìèíèñòðàòîðà";
|
|
$this->ipsclass->admin->page_detail = "Ýòà ñåêöèÿ ïîçâîëèò âàì óïðàâëÿòü îãðàíè÷åíèåì ïðàâ àäìèíèñòðàòîðîâ.";
|
|
$this->ipsclass->admin->output();
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// ACP: Import ACP Permissions file
|
|
/*-------------------------------------------------------------------------*/
|
|
/**
|
|
* Import XML file
|
|
*
|
|
* Grabs XML file, parses it and updates missing entries
|
|
*
|
|
* @return void
|
|
* @since 2.1.0.2005-7-7
|
|
*/
|
|
function acpperms_xml_import( $noreturn=0 )
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$updated = 0;
|
|
$inserted = 0;
|
|
$cur_perms = array();
|
|
|
|
//-----------------------------------------
|
|
// Get file
|
|
//-----------------------------------------
|
|
|
|
if ( $_FILES['FILE_UPLOAD']['name'] == "" or ! $_FILES['FILE_UPLOAD']['name'] or ($_FILES['FILE_UPLOAD']['name'] == "none") )
|
|
{
|
|
//-----------------------------------------
|
|
// check and load from server
|
|
//-----------------------------------------
|
|
|
|
if ( ! $this->ipsclass->input['file_location'] )
|
|
{
|
|
$this->ipsclass->main_msg = "Ôàéë íå áûë íàéäåí.";
|
|
$this->acpperms_list();
|
|
}
|
|
|
|
if ( ! file_exists( ROOT_PATH . $this->ipsclass->input['file_location'] ) )
|
|
{
|
|
$this->ipsclass->main_msg = "Íåëüçÿ íàéòè ôàéëû, ÷òîáû îòêðûòü: " . ROOT_PATH . $this->ipsclass->input['file_location'];
|
|
$this->acpperms_list();
|
|
}
|
|
|
|
if ( preg_match( "#\.gz$#", $this->ipsclass->input['file_location'] ) )
|
|
{
|
|
if ( $FH = @gzopen( ROOT_PATH.$this->ipsclass->input['file_location'], 'rb' ) )
|
|
{
|
|
while ( ! @gzeof( $FH ) )
|
|
{
|
|
$content .= @gzread( $FH, 1024 );
|
|
}
|
|
|
|
@gzclose( $FH );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( $FH = @fopen( ROOT_PATH.$this->ipsclass->input['file_location'], 'rb' ) )
|
|
{
|
|
$content = @fread( $FH, filesize(ROOT_PATH.$this->ipsclass->input['file_location']) );
|
|
@fclose( $FH );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//-----------------------------------------
|
|
// Get uploaded schtuff
|
|
//-----------------------------------------
|
|
|
|
$tmp_name = $_FILES['FILE_UPLOAD']['name'];
|
|
$tmp_name = preg_replace( "#\.gz$#", "", $tmp_name );
|
|
|
|
$content = $this->ipsclass->admin->import_xml( $tmp_name );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Get current permission keys.
|
|
//-----------------------------------------
|
|
|
|
$this->ipsclass->DB->simple_construct( array( 'select' => '*',
|
|
'from' => 'admin_permission_keys' ) );
|
|
|
|
$this->ipsclass->DB->simple_exec();
|
|
|
|
while ( $r = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$cur_perms[ $r['perm_key'] ] = $r['perm_key'];
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Get xml mah-do-dah
|
|
//-----------------------------------------
|
|
|
|
require_once( KERNEL_PATH.'class_xml.php' );
|
|
|
|
$xml = new class_xml();
|
|
|
|
//-----------------------------------------
|
|
// Unpack the datafile
|
|
//-----------------------------------------
|
|
|
|
$xml->xml_parse_document( $content );
|
|
|
|
//-----------------------------------------
|
|
// Fix up...
|
|
//-----------------------------------------
|
|
|
|
if ( ! is_array( $xml->xml_array['permsexport']['permsgroup']['perm'][0] ) )
|
|
{
|
|
//-----------------------------------------
|
|
// Ensure [0] is populated
|
|
//-----------------------------------------
|
|
|
|
$tmp = $xml->xml_array['permsexport']['permsgroup']['perm'];
|
|
|
|
unset($xml->xml_array['permsexport']['permsgroup']['perm']);
|
|
|
|
$xml->xml_array['permsexport']['permsgroup']['perm'][0] = $tmp;
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Loop through and sort out settings...
|
|
//-----------------------------------------
|
|
|
|
foreach( $xml->xml_array['permsexport']['permsgroup']['perm'] as $id => $entry )
|
|
{
|
|
//-----------------------------------------
|
|
// Do we have a row matching this already?
|
|
//-----------------------------------------
|
|
|
|
$_perm_main = $entry['acpperm_main']['VALUE'];
|
|
$_perm_child = $entry['acpperm_child']['VALUE'];
|
|
$_perm_bit = $entry['acpperm_bit']['VALUE'];
|
|
|
|
$_perm_key = $_perm_main.':'.$_perm_child.':'.$_perm_bit;
|
|
|
|
if ( ! $cur_perms[ $_perm_key ] )
|
|
{
|
|
$this->ipsclass->DB->do_insert( 'admin_permission_keys', array( 'perm_key' => $_perm_key,
|
|
'perm_main' => $_perm_main,
|
|
'perm_child' => $_perm_child,
|
|
'perm_bit' => $_perm_bit ) );
|
|
|
|
$inserted++;
|
|
}
|
|
}
|
|
|
|
$this->ipsclass->main_msg = "$inserted êëþ÷è ïðàâ äîñòóïà âñòàâëåíû";
|
|
|
|
if ( ! $noreturn )
|
|
{
|
|
$this->acpperms_list();
|
|
}
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// ACP: DEV: Build report: Language file
|
|
/*-------------------------------------------------------------------------*/
|
|
/**
|
|
* Build language file basics
|
|
*
|
|
* Generate language files with empty keys
|
|
*
|
|
* @return void
|
|
* @since 2.1.0.2005-7-7
|
|
*/
|
|
function acpperms_dev_report_language()
|
|
{
|
|
$this->ipsclass->admin->nav[] = array( $this->ipsclass->form_code, 'Ïðàâà äîñòóïà â àäìèíöåíòð: Ðàçðàáîò÷èê èíñòðóìåíòîâ' );
|
|
|
|
//-------------------------------
|
|
// INIT
|
|
//-------------------------------
|
|
|
|
$content = "";
|
|
$temp = "";
|
|
|
|
//-------------------------------
|
|
// Pick through dir
|
|
//-------------------------------
|
|
|
|
$master = $this->_acpperms_parse_source_folder();
|
|
|
|
//-------------------------------
|
|
// ...Check for matches
|
|
//-------------------------------
|
|
|
|
foreach( $master as $_name => $data )
|
|
{
|
|
//-------------------------------
|
|
// Got anything?
|
|
//-------------------------------
|
|
|
|
if ( $master[ $_name ]['perm_main'] AND $master[ $_name ]['perm_child'] AND count($master[ $_name ]['perm_bits']) )
|
|
{
|
|
$permkey = $master[ $_name ]['perm_main'].':'.$master[ $_name ]['perm_child'];
|
|
|
|
$temp[ $permkey ][] = str_pad("'".$permkey."'", 45, " " ) . "=>\t" . '"'. $this->lang[ $permkey ]. '",'."\n";
|
|
|
|
foreach( $master[ $_name ]['perm_bits'] as $_bit => $bit_data )
|
|
{
|
|
$bitkey = $master[ $_name ]['perm_main'].':'.$master[ $_name ]['perm_child'].':'.$_bit;
|
|
$temp[ $bitkey ][] = str_pad("'".$bitkey."'", 45, " " ) . "=>\t" . '"'. $bit_data['langstring']. '",'."\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
//-------------------------------
|
|
// Re-order by key
|
|
//-------------------------------
|
|
|
|
ksort( $temp );
|
|
|
|
//-------------------------------
|
|
// Implode
|
|
//-------------------------------
|
|
|
|
foreach( $temp as $main => $data )
|
|
{
|
|
foreach( $data as $line )
|
|
{
|
|
$content .= $line;
|
|
}
|
|
}
|
|
|
|
//-------------------------------
|
|
// Add in single entries
|
|
//-------------------------------
|
|
|
|
foreach( array( 'admin', 'content', 'lookandfeel', 'components', 'tools' ) as $bitkey )
|
|
{
|
|
$content .= str_pad("'".$bitkey."'", 45, " " ) . "=>\t" . '"'. $this->lang[ $bitkey ]. '",'."\n";
|
|
}
|
|
|
|
$this->ipsclass->html .= "<textarea style='width:100%;height:400px'><"."?php\n#Íå çàïîëíèëè ïóñòûå ñåêöèè, îíè çàïîëíÿòñÿ àâòîìàòè÷åñêè\n\$lang = array(\n{$content}\n);\n?"."></textarea>";
|
|
|
|
$this->ipsclass->admin->page_title = "Ïðàâà äîñòóïà àäìèíèñòðàòîðîâ";
|
|
$this->ipsclass->admin->page_detail = "Ýòà ñåêöèÿ ïîçâîëèò âàì óïðàâëÿòü ïðàâàìè äîñòóïà àäìèíèñòðàòîðîâ.";
|
|
$this->ipsclass->admin->output();
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// ACP: DEV: Build report: Missing sources
|
|
/*-------------------------------------------------------------------------*/
|
|
/**
|
|
* Build missing files report
|
|
*
|
|
* Generate list of files which don't have permission info
|
|
*
|
|
* @return void
|
|
* @since 2.1.0.2005-7-7
|
|
*/
|
|
function acpperms_dev_report_missing()
|
|
{
|
|
$this->ipsclass->admin->nav[] = array( $this->ipsclass->form_code, 'Ïðàâà äîñòóïà â àäìèíöåíòð: Ðàçðàáîò÷èê èíñòðóìåíòîâ' );
|
|
|
|
//-------------------------------
|
|
// INIT
|
|
//-------------------------------
|
|
|
|
$content = "";
|
|
|
|
//-------------------------------
|
|
// Pick through dir
|
|
//-------------------------------
|
|
|
|
$master = $this->_acpperms_parse_source_folder();
|
|
|
|
//-------------------------------
|
|
// ...Check for matches
|
|
//-------------------------------
|
|
|
|
foreach( $master as $_name => $data )
|
|
{
|
|
//-------------------------------
|
|
// Got anything?
|
|
//-------------------------------
|
|
|
|
if ( ! count($master[ $_name ]['perm_bits']) )
|
|
{
|
|
$content .= "<span style='color:red;font-weight:bold'>{$_name}.php íåò èíôîðìàöèè î ïðàâàõ äîñòóïà....</span><br />";
|
|
}
|
|
else
|
|
{
|
|
$content .= "<span style='color:green'>{$_name}.php åñòü èíôîðìàöèÿ î ïðàâàõ äîñòóïà....</span><br />";
|
|
}
|
|
}
|
|
|
|
$this->ipsclass->html .= $content;
|
|
|
|
$this->ipsclass->admin->page_title = "Ïðàâà äîñòóïà àäìèíèñòðàòîðîâ";
|
|
$this->ipsclass->admin->page_detail = "Ýòà ñåêöèÿ ïîçâîëèò âàì óïðàâëÿòü ïðàâàìè äîñòóïà àäìèíèñòðàòîðîâ.";
|
|
$this->ipsclass->admin->output();
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Go through sources, regex out permission checks, build XML document
|
|
/*-------------------------------------------------------------------------*/
|
|
/**
|
|
* Source folder to XML
|
|
*
|
|
* Generate new XML of permission bits
|
|
*
|
|
* @return void
|
|
* @since 2.1.0.2005-7-7
|
|
*/
|
|
function acpperms_dev_source_to_xml()
|
|
{
|
|
//-------------------------------
|
|
// INIT
|
|
//-------------------------------
|
|
|
|
$content = "";
|
|
|
|
//-------------------------------
|
|
// Pick through dir
|
|
//-------------------------------
|
|
|
|
$master = $this->_acpperms_parse_source_folder();
|
|
|
|
//-----------------------------------------
|
|
// Get xml mah-do-dah
|
|
//-----------------------------------------
|
|
|
|
require( KERNEL_PATH.'class_xml.php' );
|
|
|
|
$xml = new class_xml();
|
|
|
|
//-----------------------------------------
|
|
// Start...
|
|
//-----------------------------------------
|
|
|
|
$xml->xml_set_root( 'permsexport', array( 'exported' => time(), 'versionid' => '2.1.0', 'type' => 'master' ) );
|
|
|
|
//-----------------------------------------
|
|
// Get group
|
|
//-----------------------------------------
|
|
|
|
$xml->xml_add_group( 'permsgroup' );
|
|
|
|
//-------------------------------
|
|
// ...Check for matches
|
|
//-------------------------------
|
|
|
|
foreach( $master as $_name => $data )
|
|
{
|
|
//-------------------------------
|
|
// Got anything?
|
|
//-------------------------------
|
|
|
|
if ( $master[ $_name ]['perm_main'] AND $master[ $_name ]['perm_child'] AND count($master[ $_name ]['perm_bits']) )
|
|
{
|
|
foreach( $master[ $_name ]['perm_bits'] as $_bit => $bit_data )
|
|
{
|
|
$content = array();
|
|
|
|
$content[] = $xml->xml_build_simple_tag( 'acpperm_bit' , $bit_data['name'] );
|
|
$content[] = $xml->xml_build_simple_tag( 'acpperm_main' , $master[ $_name ]['perm_main'] );
|
|
$content[] = $xml->xml_build_simple_tag( 'acpperm_child' , $master[ $_name ]['perm_child'] );
|
|
|
|
$entry[] = $xml->xml_build_entry( 'perm', $content );
|
|
}
|
|
}
|
|
}
|
|
|
|
$xml->xml_add_entry_to_group( 'permsgroup', $entry );
|
|
|
|
$xml->xml_format_document();
|
|
|
|
//-----------------------------------------
|
|
// Send to browser.
|
|
//-----------------------------------------
|
|
|
|
$this->ipsclass->admin->show_download( $xml->xml_document, 'ipb_acpperms.xml', '', 0 );
|
|
|
|
exit();
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Go through sources, regex out permission checks
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
/**
|
|
* Parse sources folder
|
|
*
|
|
* Parse sources folder, put all perm into $master array
|
|
*
|
|
* @return array $master array
|
|
* @since 2.1.0.2005-7-7
|
|
*/
|
|
function _acpperms_parse_source_folder()
|
|
{
|
|
//-------------------------------
|
|
// INIT
|
|
//-------------------------------
|
|
|
|
$dir = ROOT_PATH . "sources/action_admin";
|
|
$master = array();
|
|
|
|
//-------------------------------
|
|
// Load lang file...
|
|
//-------------------------------
|
|
|
|
require_once( ROOT_PATH . 'cache/lang_cache/ru/acp_lang_acpperms.php' );
|
|
|
|
$this->lang = $lang;
|
|
|
|
//-------------------------------
|
|
// Loop....
|
|
//-------------------------------
|
|
|
|
$handle = opendir($dir);
|
|
|
|
while ( ( $file = readdir($handle) ) !== false )
|
|
{
|
|
if ( ($file != ".") && ($file != "..") && ($file != '.DS_Store') )
|
|
{
|
|
if ( is_file( $dir."/".$file ) )
|
|
{
|
|
//-------------------------------
|
|
// Open file and get perm rows
|
|
//-------------------------------
|
|
|
|
$code = implode( '', file( $dir."/".$file ) );
|
|
$_name = str_replace( ".php", "", $file );
|
|
|
|
$master[ $_name ] = array();
|
|
|
|
//-------------------------------
|
|
// Get perm main....
|
|
//-------------------------------
|
|
|
|
preg_match( '#var\s+?\$perm_main\s+?=\s+?[\'"](.+?)[\'"];#', $code, $match );
|
|
|
|
$master[ $_name ]['perm_main'] = $match[1];
|
|
|
|
//-------------------------------
|
|
// Get perm child....
|
|
//-------------------------------
|
|
|
|
preg_match( '#var\s+?\$perm_child\s+?=\s+?[\'"](.+?)[\'"];#', $code, $match );
|
|
|
|
$master[ $_name ]['perm_child'] = $match[1];
|
|
|
|
if ( $master[ $_name ]['perm_main'] AND $master[ $_name ]['perm_child'] )
|
|
{
|
|
//-------------------------------
|
|
// Get perm rows
|
|
//-------------------------------
|
|
|
|
preg_match_all( '#cp_permission_check\(\s+?\$this->perm_main\.[\'"]\|[\'"]\.\$this->perm_child\.[\'"]\:(.+?)[\'"]\s+?\);#i', $code, $match );
|
|
|
|
for ($i=0; $i < count($match[0]); $i++)
|
|
{
|
|
$_bit = trim($match[1][$i]);
|
|
$master[ $_name ]['perm_bits'][ $_bit ]['name'] = $_bit;
|
|
$master[ $_name ]['perm_bits'][ $_bit ]['langstring'] = $lang[ $master[ $_name ]['perm_main'].':'.$master[ $_name ]['perm_child'].':'.$_bit ];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
closedir($handle);
|
|
|
|
return $master;
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// List current members
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
/**
|
|
* List members
|
|
*
|
|
* @return array $master array
|
|
* @since 2.1.0.2005-7-7
|
|
*/
|
|
function acpperms_list()
|
|
{
|
|
$this->ipsclass->admin->nav[] = array( $this->ipsclass->form_code, 'Óïðàâëåíèå îãðàíè÷åíèÿìè' );
|
|
|
|
//-------------------------------
|
|
// INIT
|
|
//-------------------------------
|
|
|
|
$content = "";
|
|
$rows = array();
|
|
$admin_groups = array();
|
|
|
|
//-------------------------------
|
|
// Get current ACP listed members
|
|
//-------------------------------
|
|
|
|
$this->ipsclass->DB->build_query( array( 'select' => 'p.*',
|
|
'from' => array( 'admin_permission_rows' => 'p' ),
|
|
'add_join' => array( 0 => array(
|
|
'select' => 'm.members_display_name, m.id, m.mgroup',
|
|
'from' => array( 'members' => 'm' ),
|
|
'where' => 'm.id=p.row_member_id',
|
|
'type' => 'inner' ) ),
|
|
'order' => 'm.members_display_name DESC' ) );
|
|
|
|
$this->ipsclass->DB->exec_query();
|
|
|
|
while( $r = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
//-------------------------------
|
|
// (Alex) Cross
|
|
//-------------------------------
|
|
|
|
$r['_date'] = $this->ipsclass->get_date( $r['row_updated'], 'SHORT', 1 );
|
|
$r['_group_name'] = $this->ipsclass->cache['group_cache'][ $r['mgroup'] ]['g_title'];
|
|
|
|
$content .= $this->html->acp_perms_row($r);
|
|
}
|
|
|
|
$this->ipsclass->html .= $this->html->acp_perms_overview( $content );
|
|
|
|
$this->ipsclass->admin->page_title = "Óïðàâëåíèå îãðàíè÷åíèÿìè";
|
|
$this->ipsclass->admin->page_detail = "Ýòà ñåêöèÿ ïîçâîëèò âàì óïðàâëÿòü îãðàíè÷åíèåì ïðàâ àäìèíèñòðàòîðîâ.";
|
|
$this->ipsclass->admin->output();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
?>
|