Admin functions library
| > Script written by Matt Mecham
| > Date started: 1st march 2002
|
+--------------------------------------------------------------------------
*/
class admin_functions {
var $img_url;
var $page_title = "Welcome to the Invision Board Administration CP";
var $page_detail = "You can set up and customize your board from within this control panel.
Clicking on one of the links in the left menu pane will show you the relevant options for that administration category. Each option will contain further information on configuration, etc.";
var $html;
var $errors = "";
var $nav = array();
function admin_functions() {
global $INFO, $IN;
$this->img_url = $INFO['html_url'].'/sys-img';
$this->base_url = $INFO['board_url']."/admin.".$INFO['php_ext']."?adsess=".$IN['AD_SESS'];
}
//**********************************************/
// save_log
//
// Add an entry into the admin logs, yeah.
//**********************************************/
function save_log($action="")
{
global $INFO, $DB, $IN, $MEMBER;
$str = $DB->compile_db_insert_string( array(
'act' => $IN['act'],
'code' => $IN['code'],
'member_id' => $MEMBER['id'],
'ctime' => time(),
'note' => $action,
'ip_address' => $IN['IP_ADDRESS'],
) );
$DB->query("INSERT INTO ibf_admin_logs ({$str['FIELD_NAMES']}) VALUES ({$str['FIELD_VALUES']})");
return true; // to anyone that cares..
}
//**********************************************/
// get_tar_names
//
// Simply returns a list of tarballs that start
// with the given filename
//**********************************************/
function get_tar_names($start='lang-')
{
global $INFO;
// Remove trailing slashes..
$files = array();
$dir = $INFO['base_dir']."archive_in";
if ( is_dir($dir) )
{
$handle = opendir($dir);
while (($filename = readdir($handle)) !== false)
{
if (($filename != ".") && ($filename != ".."))
{
if (preg_match("/^$start.+?\.tar$/", $filename))
{
$files[] = $filename;
}
}
}
closedir($handle);
}
return $files;
}
//**********************************************/
// copy_dir
//
// Copies to contents of a dir to a new dir, creating
// destination dir if needed.
//
//**********************************************/
function copy_dir($from_path, $to_path, $mode = 0777)
{
global $INFO;
// Strip off trailing slashes...
$from_path = preg_replace( "#/$#", "", $from_path);
$to_path = preg_replace( "#/$#", "", $to_path);
if ( ! is_dir($from_path) )
{
$this->errors = "Could not locate directory '$from_path'";
return FALSE;
}
if ( ! is_dir($to_path) )
{
if ( ! @mkdir($to_path, $mode) )
{
$this->errors = "Could not create directory '$to_path' please check the CHMOD permissions and re-try";
return FALSE;
}
else
{
@chmod($to_path, $mode);
}
}
$this_path = getcwd();
if (is_dir($from_path))
{
chdir($from_path);
$handle=opendir('.');
while (($file = readdir($handle)) !== false)
{
if (($file != ".") && ($file != ".."))
{
if (is_dir($file))
{
$this->copy_dir($from_path."/".$file, $to_path."/".$file);
chdir($from_path);
}
if ( is_file($file) )
{
copy($from_path."/".$file, $to_path."/".$file);
@chmod($to_path."/".$file, 0777);
}
}
}
closedir($handle);
}
if ($this->errors == "")
{
return TRUE;
}
}
//**********************************************/
// rm_dir
//
// Removes directories, if non empty, removes
// content and directories
// (Code based on annotations from the php.net
// manual by pal@degerstrom.com)
//**********************************************/
function rm_dir($file)
{
global $INFO;
$errors = 0;
// Remove trailing slashes..
$file = preg_replace( "#/$#", "", $file );
if ( file_exists($file) )
{
// Attempt CHMOD
@chmod($file, 0777);
if ( is_dir($file) )
{
$handle = opendir($file);
while (($filename = readdir($handle)) !== false)
{
if (($filename != ".") && ($filename != ".."))
{
$this->rm_dir($file."/".$filename);
}
}
closedir($handle);
if ( ! @rmdir($file) )
{
$errors++;
}
}
else
{
if ( ! @unlink($file) )
{
$errors++;
}
}
}
if ($errors == 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
//**********************************************/
// rebuild_config:
//
// Er, rebuilds the config file
//
//**********************************************/
function rebuild_config( $new = "" )
{
global $IN, $std, $root_path;
//-----------------------------------------
// Check to make sure this is a valid array
//-----------------------------------------
if (! is_array($new) )
{
$ADMIN->error("Error whilst attempting to rebuild the board config file, attempt aborted");
}
//-----------------------------------------
// Do we have anything to save out?
//-----------------------------------------
if ( count($new) < 1 )
{
return "";
}
//-----------------------------------------
// Get an up to date copy of the config file
// (Imports $INFO)
//-----------------------------------------
require $root_path.'conf_global.php';
//-----------------------------------------
// Rebuild the $INFO hash
//-----------------------------------------
foreach( $new as $k => $v )
{
// Update the old...
$v = preg_replace( "/'/", "\\'" , $v );
$v = preg_replace( "/\r/", "" , $v );
$INFO[ $k ] = $v;
}
//-----------------------------------------
// Rename the old config file
//-----------------------------------------
@rename( $root_path.'conf_global.php', $root_path.'conf_global-bak.php' );
@chmod( $root_path.'conf_global-bak.php', 0777);
//-----------------------------------------
// Rebuild the old file
//-----------------------------------------
$file_string = " $v )
{
if ($k == 'skin' or $k == 'languages')
{
// Protect serailized arrays..
$v = stripslashes($v);
$v = addslashes($v);
}
$file_string .= '$INFO['."'".$k."'".']'."\t\t\t=\t'".$v."';\n";
}
$file_string .= "\n".'?'.'>'; // Question mark + greater than together break syntax hi-lighting in BBEdit 6 :p
if ( $fh = fopen( $root_path.'conf_global.php', 'w' ) )
{
fputs ($fh, $file_string, strlen($file_string) );
fclose($fh);
}
else
{
$ADMIN->error("Fatal Error: Could not open conf_global for writing - no changes applied. Try changing the CHMOD to 0777");
}
// Pass back the new $INFO array to anyone who cares...
return $INFO;
}
//**********************************************/
// compile_forum_perms:
//
// Returns the READ/REPLY/START DB strings
//
//**********************************************/
function compile_forum_perms() {
global $DB, $IN;
$r_array = array( 'READ' => '', 'REPLY' => '', 'START' => '', 'UPLOAD' => '' );
if ($IN['READ_ALL'] == 1)
{
$r_array['READ'] = '*';
}
if ($IN['REPLY_ALL'] == 1)
{
$r_array['REPLY'] = '*';
}
if ($IN['START_ALL'] == 1)
{
$r_array['START'] = '*';
}
if ($IN['UPLOAD_ALL'] == 1)
{
$r_array['UPLOAD'] = '*';
}
$DB->query("SELECT g_id, g_title FROM ibf_groups ORDER BY g_id");
while ( $data = $DB->fetch_row() )
{
if ($r_array['READ'] != '*')
{
if ($IN[ 'READ_'.$data['g_id'] ] == 1)
{
$r_array['READ'] .= $data['g_id'].",";
}
}
//+----------------------------
if ($r_array['REPLY'] != '*')
{
if ($IN[ 'REPLY_'.$data['g_id'] ] == 1)
{
$r_array['REPLY'] .= $data['g_id'].",";
}
}
//+----------------------------
if ($r_array['START'] != '*')
{
if ($IN[ 'START_'.$data['g_id'] ] == 1)
{
$r_array['START'] .= $data['g_id'].",";
}
}
//+----------------------------
if ($r_array['UPLOAD'] != '*')
{
if ($IN[ 'UPLOAD_'.$data['g_id'] ] == 1)
{
$r_array['UPLOAD'] .= $data['g_id'].",";
}
}
}
$r_array['START'] = preg_replace( "/,$/", "", $r_array['START'] );
$r_array['REPLY'] = preg_replace( "/,$/", "", $r_array['REPLY'] );
$r_array['READ'] = preg_replace( "/,$/", "", $r_array['READ'] );
$r_array['UPLOAD'] = preg_replace( "/,$/", "", $r_array['UPLOAD'] );
return $r_array;
}
//+------------------------------------------------
//+------------------------------------------------
// OUTPUT FUNCTIONS
//+------------------------------------------------
//+------------------------------------------------
function print_popup() {
global $IN, $INFO, $DB, $std, $SKIN, $use_gzip;
$html = "
Remote
";
$html .= $SKIN->get_css();
$html .= "\n";
$html .= "
";
$html .= $this->html;
$html .= " | |