Тема: Ищу ошибку в скрипте и немогу найти

Код скрипта следующий:

<?php
function ShowModSetupPage( $tpl_f = "" )
{
    global $O_HW;
    global $err_msg;
    global $MOD_CFG;
    $A_CFG = array( );
    include( SITE_PATH."modules/".HW_MOD."/hw_info.php" );
    if ( $A_CFG )
    {
        $a_v = $O_HW->GetModOptions( HW_MOD );
        if ( is_array( $a_v ) )
        {
            foreach ( array_keys( $a_v ) as $k )
            {
                if ( !isset( $A_CFG[$k] ) )
                {
                    unset( $a_v[$k] );
                }
            }
            if ( $a_v )
            {
                $A_CFG = array_merge( $A_CFG, $a_v );
            }
            unset( $a_v );
        }
    }
    if ( $_POST['go'] )
    {
        if ( $A_CFG )
        {
            foreach ( array_keys( $A_CFG ) as $k )
            {
                if ( !isset( $_POST[$k] ) && substr( $k, 0, 3 ) != "EN_" )
                {
                    continue;
                }
                $A_CFG[$k] = $_POST[$k];
            }
        }
        $func = HW_MOD."_SetupValidate";
        if ( function_exists( $func ) )
        {
            $err_msg = $func( );
        }
        if ( !$err_msg )
        {
            $func = HW_MOD."_SetupOnSave";
            if ( function_exists( $func ) )
            {
                $func( $A_CFG );
            }
            $O_HW->SetModOptions( HW_MOD, $A_CFG );
            $MOD_CFG = $O_HW->GetModOptions( HW_MOD );
            $err_msg = hwlng( "updated_ok" );
        }
    }
    $z = array( );
    if ( $A_CFG )
    {
        foreach ( $A_CFG as $k => $v )
        {
            if ( substr( $k, 0, 3 ) == "EN_" )
            {
                $z[$k] = $v ? "checked" : "";
            }
            else
            {
                $z[$k] = $v;
            }
        }
    }
    $func = HW_MOD."_SetupPrepare";
    if ( function_exists( $func ) )
    {
        $func( $z );
    }
    if ( !$tpl_f )
    {
        $tpl_f = HW_MOD_TPL."setup.htm";
    }
    return evaladvtpl( $tpl_f, $z );
}

function hwGetModuleDescr( $mod )
{
    global $db;
    list( $state, $descr ) = $db->one_row( "SELECT state,descr FROM ".TBL_MODULES." WHERE dir=".$db->esc( $mod )." AND admin_capable=\"1\"" );
    if ( $state != "A" && $state != "I" )
    {
        showadmheader( );
        echo "Module is not available";
        showadmfooter( );
        exit( );
    }
    return $descr;
}

define( "HTTP_HOST", $_SERVER['HTTP_HOST'] );
define( "ADMIN_AREA", 1 );
require( "../inc/application.php" );
if ( basename( __FILE__ ) != "modules.php" )
{
    exit( "Access Denied" );
}
$mod = $_POST['mod'] ? $_POST['mod'] : $_GET['mod'];
$mod = ( boolean )$mod;
$a_mods = hwmodgetarray( );
if ( !$mod || !$a_mods[$mod] )
{
    exit( "Module not found" );
}
checkloggedinadm( );
$HW_MOD = $mod;
$HW_MOD_DIR = MOD_DIR.$HW_MOD."/";
$HW_MOD_URL = "modules.php?mod=".$HW_MOD;
define( "HW_MOD", $mod );
define( "HW_MOD_DIR", MOD_DIR.HW_MOD."/" );
define( "HW_MOD_URL", "modules.php?mod=".HW_MOD );
define( "HW_MOD_TPL", HW_MOD_DIR."tpl/admin/" );
$MOD_CFG = $O_HW->GetModOptions( HW_MOD );
$mod_descr = hwgetmoduledescr( HW_MOD );
if ( !hwhasvalidkey( HW_MOD ) )
{
    exit( "Module is not licensed for this domain : ".HW_MOD );
}
include( HW_MOD_DIR."hw_admin.php" );
hwmodloadlng( HW_MOD );
$HW_WRAP = 1;
if ( $pg == "setup" || $_GET['pg'] == "setup" )
{
    $buf = showmodsetuppage( );
}
else
{
    $func = HW_MOD."_main";
    if ( !function_exists( $func ) )
    {
        exit( );
    }
    ob_start( );
    $ret_buf = $func( );
    $buf = ob_get_contents( );
    ob_end_clean( );
    if ( empty( $buf ) )
    {
        $buf = $ret_buf;
    }
    unset( $ret_buf );
}
if ( $HW_WRAP )
{
    $buf = showadmheader( 0 ).$buf.showadmfooter( 0 );
}
hwprocesstags( $buf );
echo $buf;
printparsetime( );
?>

Запускаю в системе - получаю ответ

Module not found

Очевидно, шибка в отрезке

define( "HTTP_HOST", $_SERVER['HTTP_HOST'] );
define( "ADMIN_AREA", 1 );
require( "../inc/application.php" );
if ( basename( __FILE__ ) != "modules.php" )
{
    exit( "Access Denied" );
}
$mod = $_POST['mod'] ? $_POST['mod'] : $_GET['mod'];
$mod = ( boolean )$mod;
$a_mods = hwmodgetarray( );
if ( !$mod || !$a_mods[$mod] )
{
    exit( "Module not found" );
}

а особенно в

$mod = $_POST['mod'] ? $_POST['mod'] : $_GET['mod'];
$mod = ( boolean )$mod;
$a_mods = hwmodgetarray( );

Прошу помочь. Подозрение общее на ошибку в цикле, либо пропущена запятая или скобка!

2

Re: Ищу ошибку в скрипте и немогу найти

// Здесь в $mod вкладывается булево значение
$mod = ( boolean )$mod;

// Здесь переменная $mod стала ключом массива $a_mods, из чего выходит $a_mods[true]
//Ошибка: ключ массива может быть только целым числом или строкой.
if ( !$mod || !$a_mods[$mod] )

3

Re: Ищу ошибку в скрипте и немогу найти

Hanut,
Вы предлагаете убрать строки:

if ( !$mod || !$a_mods[$mod] )
{
    exit( "Module not found" );

?

4

Re: Ищу ошибку в скрипте и немогу найти

// Попробуйте закомментировать эту.
$mod = ( boolean )$mod;

Я предлагаю посмотреть на работу функции hwmodgetarray( ) и возвращаемый ею массив, а именно, наличие массива с индексом, который приходит с переменной $mod.

5

Re: Ищу ошибку в скрипте и немогу найти

Закомментировал! Вроде бы система модуль нашла, но
ролучаю сообщене
Warning: file_get_contents(Y:/home/localhost/www/mysite/tpl/admin/u_setup.htm) [function.file-get-contents]: failed to open stream: No such file or directory in Y:\home\localhost\www\mysite\inc\lib.inc.php on line 93

В папке tpl/admin/ есть такие файлы в которых есть ~setup.php , но нет u_setup.htm

Похоже, что скрипту сказано искать неправильное имя файла

6

Re: Ищу ошибку в скрипте и немогу найти

pellets-wood сказал:

lib.inc.php on line 93

Смотрите здесь как формируется имя файла.

7

Re: Ищу ошибку в скрипте и немогу найти

Искомая строка

 return file_get_contents( hwlnggetpath( $f ) );

Что с ней делать?
Задаю в поиске "file_get_contents" получаю файлы в которых встречается

8

Re: Ищу ошибку в скрипте и немогу найти

pellets-wood
Смотрите выше формирование переменной $f и преобразования производимые в функции hwlnggetpath().

9

Re: Ищу ошибку в скрипте и немогу найти

Hanut,

содержимое файла lib.inc.php
мне ничего не подсказало
[code]<?php


function CheckLoggedInAdm( )
{
    include_once( SITE_PATH."inc/admin.inc.php" );
    if ( !isadmin( ) )
    {
        header( "Location: index.php?page=login&ref_url=".urlencode( $_SERVER['REQUEST_URI'] ) );
        exit( );
    }
}

function IsBanned( $id, $UNBAN_MIN, $type = "" )
{
    global $db;
    if ( !$id || !$UNBAN_MIN )
    {
        return 0;
    }
    $esc_ip = $db->esc( $_SERVER['REMOTE_ADDR'] );
    $ts = $db->one_data( "SELECT UNIX_TIMESTAMP(bdate) FROM ".TBL_IP." WHERE ip=INET_ATON(".$esc_ip.") AND link_id='{$id}' AND type='{$type}'" );
    if ( !$ts )
    {
        $db->query( "INSERT IGNORE INTO ".TBL_IP." (ip,link_id,bdate,type) VALUES (INET_ATON(".$esc_ip."),'{$id}',".SQL_NOW.",'{$type}')" );
    }
    else
    {
        if ( HW_TIME - $UNBAN_MIN * 60 < $ts )
        {
            return 1;
        }
        $db->query( "UPDATE ".TBL_IP." SET bdate=".SQL_NOW." WHERE ip=INET_ATON(".$esc_ip.") AND link_id='{$id}' AND type='{$type}'"." AND bdate<DATE_SUB(".SQL_NOW.", INTERVAL {$UNBAN_MIN} MINUTE)" );
        if ( $db->affected_rows( ) < 1 )
        {
            return 1;
        }
    }
    return 0;
}

function get_daughter_cats( $catid, $tbl = TBL_CAT )
{
    global $db;
    static $A_RES = NULL;
    if ( is_array( $catid ) )
    {
        $cnt = count( $catid );
        $i = 0;
        for ( ;    $i < $cnt;    ++$i    )
        {
            if ( !ctype_digit( ( boolean )$catid[$i] ) )
            {
                unset( $catid[$i] );
            }
        }
        $catid = implode( ",", $catid );
    }
    else if ( !ctype_digit( ( boolean )$catid ) )
    {
        $catid = preg_replace( "/[^\\d,]/", "", $catid );
    }
    if ( !isset( $A_RES[$tbl][$catid] ) )
    {
        $id_arr_tmp = explode( ",", $catid );
        $id_arr = array( );
        while ( 0 < count( $id_arr_tmp ) )
        {
            $id_arr = array_merge( $id_arr, $id_arr_tmp );
            $id_arr_tmp = $db->one_col_array( "SELECT id FROM ".$tbl." WHERE pid IN(\"".implode( "\",\"", $id_arr_tmp )."\")" );
        }
        $A_RES[$tbl][$catid] = $id_arr;
    }
    return "\"".implode( "\",\"", $A_RES[$tbl][$catid] )."\"";
}

function EvalBuffer( $buf, $vars = "", $show = 0 )
{
    $buf = HawkTpl::evalbuffer( $buf, $vars );
    if ( $show )
    {
        echo $buf;
        return "";
    }
    else
    {
        return $buf;
    }
}

function EvalAdvTpl( $tf, $vars = "", $show = 0 )
{
    return evalbuffer( hwreadtpl( $tf ), $vars, $show );
}

function hwReadTpl( $f )
{
    return file_get_contents( hwlnggetpath( $f ) );
}

function hwLngGetPath( $f, $lang = "" )
{
    if ( !$lang )
    {
        $lang = $HW_LANG;
    }
    if ( $lang == "en" )
    {
        return $f;
    }
    $ext = substr( ( $_s = strrchr( $f, "." ) ) !== false ? $_s : "", 1 );
    if ( $ext == "txt" && basename( $f ) != "config_sel.txt" )
    {
        return $f;
    }
    $f_new = hwlngcalcpath( $f, $lang );
    if ( $f_new != $f && file_exists( $f_new ) )
    {
        $f = $f_new;
    }
    return $f;
}

function hwLngCalcPath( $f, $lang )
{
    if ( $lang == "en" || strpos( $f, "/Multi_Lang/" ) !== false )
    {
        return $f;
    }
    $f_path = "";
    $f_dir = dirname( $f );
    $lang_dir = MOD_DIR."Multi_Lang/language/";
    if ( strpos( $f, "modules/" ) )
    {
        if ( substr( $f_dir, -4 ) == "/tpl" )
        {
            $mod = explode( "/", $f );
            $mod = $mod[count( $mod ) - 3];
            $f_path = $lang_dir.$lang."/modules/".$mod;
        }
    }
    else if ( strpos( $f, FS_DIR."/" ) )
    {
        $fs = explode( "/", $f );
        $fs = $fs[count( $fs ) - 2];
        $f_path = $lang_dir.$lang."/".FS_DIR."/".$fs;
    }
    else if ( $f_dir."/" == TPL_PATH )
    {
        $fn = array_pop( explode( "/", $f ) );
        $f_path = $lang_dir.$lang;
    }
    if ( $f_path )
    {
        $fn = array_pop( explode( "/", $f ) );
        $f = $f_path."/".$fn;
    }
    return $f;
}

function DoNotCache( )
{
    header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
    header( "Last-Modified: ".gmdate( "D, d M Y H:i:s" )." GMT" );
    header( "Cache-Control: no-store, no-cache, must-revalidate" );
    header( "Cache-Control: post-check=0,pre-check=0", false );
    header( "Cache-Control: max-age=0", false );
    header( "Pragma: no-cache" );
}

function JSRedirect( $url )
{
    echo "<html><script>document.location=\"".$url."\";</script></html>";
}

function GetNavigation( $href, $max_rows, $max_cols, $numrows, $off, $ex_p = "" )
{
    if ( $numrows <= $max_rows )
    {
        return "";
    }
    if ( is_array( $ex_p ) )
    {
        $a_v = $ex_p;
        $ex_p = "";
        foreach ( $a_v as $k => $v )
        {
            if ( $v != "" && !is_array( $v ) )
            {
                $ex_p .= "&{$k}=".urlencode( $v );
            }
        }
        unset( $a_v );
    }
    $a_nav = explode( "|", hwlng( "page_nav" ) );
    $var_off = "off";
    if ( strpos( $off, "=" ) )
    {
        list( $var_off, $off ) = explode( "=", $off );
    }
    if ( $ex_p && strpos( $ex_p, "&".$var_off."=" ) !== false )
    {
        $ex_p = preg_replace( "/&".$var_off."=\\d*/", "", $ex_p );
    }
    $off = abs( ( integer )$off );
    $pg = intval( $off / $max_cols );
    if ( substr( $href, -1 ) == "&" )
    {
        $f_ch = "";
    }
    else if ( strpos( $href, "?" ) )
    {
        $f_ch = "&";
    }
    else
    {
        $f_ch = "?";
    }
    if ( $ex_p )
    {
        $ex_p = $f_ch.substr( $ex_p, 1 )."&".$var_off."=";
    }
    else
    {
        $ex_p = $f_ch.$var_off."=";
    }
    $nav = "";
    if ( $pg != 0 )
    {
        $nav .= "<a href=\"".$href.$ex_p.( $max_cols * $pg - 1 )."\">".sprintf( $a_nav[0], $max_cols )."</a>  ";
    }
    if ( 0 < $off )
    {
        $nav .= "<a href=\"".$href.$ex_p.( $off - 1 )."\">".$a_nav[1]."</a>  ";
    }
    $i = 1;
    for ( ;    $i <= $max_cols;    ++$i    )
    {
        $cur_i = $i + $pg * $max_cols;
        if ( $numrows <= ( $cur_i - 1 ) * $max_rows )
        {
            break;
        }
        if ( $cur_i != $off + 1 )
        {
            $nav .= "<a href=\"".$href.$ex_p.( $cur_i - 1 )."\">".$cur_i."</a>  ";
        }
        else
        {
            $nav .= $cur_i."  ";
        }
    }
    if ( $off + 1 < ceil( $numrows / $max_rows ) )
    {
        $nav .= "<a href=\"".$href.$ex_p.( $off + 1 )."\">".$a_nav[2]."</a> &nbsp";
    }
    if ( $max_rows * $max_cols * ( $pg + 1 ) < $numrows )
    {
        $nav .= "<a href=\"".$href.$ex_p.$max_cols * ( $pg + 1 )."\">".sprintf( $a_nav[3], $max_cols )."</a> &nbsp";
    }
    return "<b>".$nav."</b>";
}

function hwGetCatSQL( $cat_f, $sql_extra = "", $tbl_cat = TBL_CAT )
{
    global $HW_LANG;
    static $A_TBL_LNG = NULL;
    if ( !isset( $A_TBL_LNG ) )
    {
        $A_TBL_LNG = array( );
        if ( hwmodgetstate( "Multi_Lang" ) == "A" )
        {
            $A_TBL_LNG[TBL_CAT] = hwmodtable( "Multi_Lang", "category" );
            $_tbl = hwmodtable( "Regions", "category" );
            $A_TBL_LNG[$_tbl] = hwmodtable( "Multi_Lang", "region" );
            $_tbl = TBL_DEP_MENU_TREE;
            $A_TBL_LNG[$_tbl] = hwmodtable( "Multi_Lang", "depmenu" );
            unset( $_tbl );
        }
    }
    $cat_f = substr( preg_replace( "/,(?!c\\.)/", ",c.", ",".$cat_f ), 1 );
    if ( $HW_LANG != "en" && isset( $A_TBL_LNG[$tbl_cat] ) )
    {
        $a_f = array( "name" );
        if ( $tbl_cat == TBL_CAT )
        {
            $a_f[] = "descr";
        }
        $temp_tbl = "_func_cat_sql_".$tbl_cat."_".$HW_LANG;
        static $A_TBL_OK = NULL;
        if ( !isset( $A_TBL_OK[$temp_tbl] ) )
        {
            $A_TBL_OK[$temp_tbl] = 1;
            global $db;
            $db->query( "DROP TEMPORARY TABLE IF EXISTS ".$temp_tbl );
            $db->query( "CREATE TEMPORARY TABLE ".$temp_tbl." SELECT id,".implode( ",", $a_f )." FROM ".$A_TBL_LNG[$tbl_cat]." WHERE lang_id=\"".$HW_LANG."\"" );
        }
        foreach ( $a_f as $f )
        {
            $cat_f = str_replace( "c.{$f}", "IF(m.{$f}<>'',m.{$f},c.{$f}) AS {$f}", $cat_f );
        }
        $sql = "SELECT ".$cat_f." FROM ".$tbl_cat." c LEFT JOIN ".$temp_tbl." m ON c.id=m.id";
    }
    else
    {
        $sql = "SELECT ".$cat_f." FROM ".$tbl_cat." c";
    }
    $sql .= " WHERE 1 ";
    if ( $sql_extra )
    {
        $sql .= " ".$sql_extra;
    }
    return $sql;
}

function ShowDropDownMultiCategoryList( $cat, $fset = "_ALL_", $hide_id = 0 )
{
    global $db;
    include_once( SITE_PATH."inc/class.categ_tree.php" );
    $o_cat =& new HawkCategTree( TBL_CAT );
    $o_cat->CAT_ORDER = "c.weight DESC,name";
    $o_cat->CAT_F = "fset";
    if ( EN_FSETS && $fset != "_ALL_" )
    {
        $A_PID = array( );
        if ( $cat && ctype_digit( ( boolean )$cat ) )
        {
            $pid = $cat;
            while ( $pid = $db->one_data( "SELECT pid FROM ".TBL_CAT." WHERE id=\"".$pid."\"" ) )
            {
                $A_PID[] = $pid;
            }
        }
        $o_cat['SQL_CAT'] .= $A_PID ? " AND (c.fset='{$fset}' OR c.id IN(".implode( ",", $A_PID )."))" : " AND c.fset='{$fset}'";
    }
    if ( $hide_id )
    {
        if ( !is_array( $hide_id ) )
        {
            $hide_id = array(
                $hide_id
            );
        }
        $hide_id = array_map( "intval", $hide_id );
        $hide_id = $db->one_col_array( "SELECT id FROM ".TBL_CAT." WHERE id IN(".implode( ",", $hide_id ).")" );
        if ( $hide_id )
        {
            $o_cat['SQL_CAT'] .= " AND c.id NOT IN(".get_daughter_cats( $hide_id ).")";
        }
    }
    $page = ( boolean )$_GET['page'];
    if ( defined( "TBL_CAT_EXTRA" ) && !defined( "ADMIN_AREA" ) && ( $page == "add" || $page == "modify" ) && PHP_SELF_BASE == "index.php" )
    {
        $no_ids = $db->one_col_array( "SELECT cid FROM ".TBL_CAT_EXTRA." WHERE type=\"H\"" );
        if ( $no_ids )
        {
            $o_cat['SQL_CAT'] .= " AND c.id NOT IN(".implode( ",", $no_ids ).")";
        }
        unset( $no_ids );
    }
    $o_cat->TPL_SHOW = FALSE;
    return $o_cat->GetMenuPage( TPL_PATH."cat_menu_multi.htm", $cat );
}

function ShowDropDownCategoryList( $cat, $name = "cat", $f_opt = "", $hide_id = 0, $onCh = "", $fset = "_ALL_" )
{
    global $hwJsCats;
    global $db;
    $page = ( boolean )$_GET['page'];
    $is_ams_page = ( $page == "add" || $page == "modify" || $page == "search" ) && PHP_SELF_BASE == "index.php";
    if ( EN_CAT_MULTI && ( $is_ams_page || $EN_CAT_MULTI ) )
    {
        return showdropdownmulticategorylist( $cat, $fset, $hide_id );
    }
    $SEL = array( );
    if ( is_array( $cat ) )
    {
        foreach ( $cat as $v )
        {
            $SEL[$v] = 1;
        }
    }
    else
    {
        $SEL[$cat] = 1;
    }
    include_once( SITE_PATH."inc/class.categ_tree.php" );
    $o_cat =& new HawkCategory( TBL_CAT );
    $o_cat->CAT_ORDER = "c.weight DESC,name";
    $o_cat->CAT_F = "fset";
    if ( EN_FSETS && $fset != "_ALL_" )
    {
        $o_cat['SQL_CAT'] .= " AND fset='{$fset}'";
    }
    if ( $hide_id )
    {
        if ( !is_array( $hide_id ) )
        {
            $hide_id = array(
                $hide_id
            );
        }
        $hide_id = array_map( "intval", $hide_id );
        $hide_id = $db->one_col_array( "SELECT id FROM ".TBL_CAT." WHERE id IN(".implode( ",", $hide_id ).")" );
        if ( $hide_id )
        {
            $o_cat['SQL_CAT'] .= " AND c.id NOT IN(".get_daughter_cats( $hide_id ).")";
        }
    }
    if ( defined( "TBL_CAT_EXTRA" ) && !defined( "ADMIN_AREA" ) && $is_ams_page && ( $page == "add" || $page == "modify" ) )
    {
        $no_ids = $db->one_col_array( "SELECT cid FROM ".TBL_CAT_EXTRA." WHERE type=\"H\"" );
        if ( $no_ids )
        {
            $o_cat['SQL_CAT'] .= " AND c.id NOT IN(".implode( ",", $no_ids ).")";
        }
        unset( $no_ids );
    }
    $a_v = $o_cat->Get_CatFullPaths_Array( );
    $cats = "";
    $cnt = count( $a_v );
    $i = 0;
    for ( ;    $i < $cnt;    ++$i    )
    {
        $v = $a_v[$i];
        $cats .= "<OPTION ".( $v['pid'] ? "" : "class=root " )."VALUE=".$v['id'];
        if ( isset( $SEL[$v['id']] ) )
        {
            $cats .= " SELECTED";
        }
        $cats .= ">".$v['cat_path']."\n";
    }
    $hwJsCats = "";
    if ( EN_FSETS && $fset == "_ALL_" )
    {
        $A_FSET = array( );
        reset( $o_cat->CAT_FDATA );
        while ( list( $_id, $_fs ) = each( $o_cat->CAT_FDATA ) )
        {
            $A_FSET[$_fs['fset']][] = $_id;
        }
        foreach ( $A_FSET as $_fs => $v )
        {
            $hwJsCats .= "\"|".implode( "|", $v )."|\",";
        }
        if ( $hwJsCats )
        {
            $hwJsCats = substr( $hwJsCats, 0, -1 );
        }
    }
    return "<select name=".$name." ".$onCh.">".$f_opt.$cats."\n</select>";
}

function ShowCategoryPath( $cid, $link_file = "", $tbl_cat = TBL_CAT )
{
    global $db;
    global $HW_LANG;
    if ( $link_file )
    {
        $href = "<a href=\"".$link_file."\">";
        $href_end = "</a>";
    }
    $cid = ( integer )$cid;
    $sql = hwgetcatsql( "c.pid,c.name", "", $tbl_cat );
    while ( $cid )
    {
        $v = $db->one_assoc( $sql." AND c.id=\"".$cid."\"" );
        if ( !$v )
        {
            return "";
        }
        if ( $href )
        {
            $name = str_replace( "##cid##", $cid, $href );
            $name = str_replace( "##pcid##", $v['pid'], $name );
        }
        else
        {
            $name = "";
        }
        $name .= $v['name'].$href_end;
        $path = $path ? $name." > ".$path : $name;
        $cid = $v['pid'];
    }
    return $path;
}

function UploadIsOK( $k, $rm_f = "", $out_dir = "" )
{
    if ( !$out_dir )
    {
        $out_dir = FILE_DIR;
    }
    $f_up = is_uploaded_file( $_FILES[$k]['tmp_name'] );
    if ( $rm_f && ( $f_up || $_POST["delete_{$k}"] ) && strpos( $rm_f, ".." ) === false )
    {
        @unlink( $out_dir.$rm_f );
        $GLOBALS['_POST'][$k] = "";
        if ( !$f_up )
        {
            return 1;
        }
    }
    if ( !$f_up )
    {
        return 0;
    }
    $fn = strtolower( basename( $_FILES[$k]['name'] ) );
    if ( preg_match( "/[^a-z0-9_\\.]/i", $fn ) )
    {
        $ext = substr( ( $_s = strrchr( $fn, "." ) ) !== false ? $_s : "", 1 );
        $fn = mt_rand( ).( $ext ? ".{$ext}" : "" );
    }
    $i = 1;
    $f = $fn;
    while ( file_exists( $out_dir.$f ) )
    {
        if ( strstr( $fn, "." ) )
        {
            $f = preg_replace( "/\\.([^\\.]*)\$/", "_{$i}.\\1", $fn );
        }
        else
        {
            $f = $fn."_".$i;
        }
        ++$i;
    }
    move_uploaded_file( $_FILES[$k]['tmp_name'], $out_dir.$f );
    chmod( $out_dir.$f, 438 );
    $GLOBALS['_POST'][$k] = $f;
    return 1;
}

function IsUser( $rd = true )
{
    global $db;
    $ses_uid = ( integer )hwsessiongetvar( "userid" );
    if ( $ses_uid )
    {
        $a_pg = array( "order" => 1, "account" => 1 );
        if ( EN_P_ADD )
        {
            $a_pg['add'] = 1;
        }
        if ( EN_P_MOD )
        {
            $a_pg['modify'] = 1;
        }
        $page = ( boolean )$_REQUEST['page'];
        if ( $rd && hwisuserexpired( ) && !$a_pg[$page] )
        {
            header( "Location: ".SITE_URL."index.php?page=account&pg=payment" );
            exit( );
        }
        hwmemberupdateonline( );
        return 1;
    }
    return hwmemberautologin( );
}

function hwIsUserExpired( )
{
    if ( HW_TIME < hwsessiongetvar( "exp_date" ) )
    {
        return 0;
    }
    $pp_id = hwsessiongetvar( "u_ac_pp" );
    if ( !strpos( hwsessiongetvar( "hw_pay_plan" ), $pp_id."-0]" ) )
    {
        $uid = ( integer )hwsessiongetvar( "userid" );
        $args = array(
            "PP_ID" => $pp_id,
            "ID" => $uid
        );
        hwevent( "PayPlanOff", $args );
        global $db;
        $A_PP_INTO = $db->two_col_assoc( "SELECT id,pp_exp_into FROM ".TBL_PAY_PLAN." WHERE type=\"SUB\" AND pp_exp_into<>\"\" AND enabled=\"1\"" );
        if ( $A_PP_INTO[$pp_id] )
        {
            $args = array(
                "PP_ID" => $A_PP_INTO[$pp_id],
                "ID" => $uid
            );
            hwevent( "PayPlanOn", $args );
        }
        hwsessionsetvar( "userid", 0 );
        list( $login, $pwd ) = $db->one_row( "SELECT ".( EN_LOGIN_EM ? "email" : "username" ).",pwd FROM ".TBL_USER." WHERE id='{$uid}'" );
        include_once( SITE_PATH."inc/auth.inc.php" );
        userauthenticate( $login, $pwd );
        if ( HW_TIME < hwsessiongetvar( "exp_date" ) )
        {
            return 0;
        }
    }
    return 1;
}

function hwMemberAutoLogin( )
{
    global $db;
    if ( defined( "ADMIN_AREA" ) || !$_COOKIE[COOKIE_LOG] || hwsessiongetvar( "userid" ) )
    {
        return 0;
    }
    include_once( SITE_PATH."inc/auth.inc.php" );
    $auth = userauthenticate( "", "", TRUE );
    if ( $auth )
    {
        hwmemberupdateonline( );
    }
    return $auth;
}

function hwMemberUpdateOnline( )
{
    $ses_uid = ( integer )hwsessiongetvar( "userid" );
    if ( !$ses_uid || !EN_TRACK_ONLINE || defined( "ADMIN_AREA" ) )
    {
        return;
    }
    static $f_ok = NULL;
    if ( isset( $f_ok ) )
    {
        return;
    }
    $f_ok = 1;
    global $db;
    $db->query( "UPDATE ".TBL_USER_ON." SET accessdate=".SQL_NOW.",last_pg=".$db->esc( $_SERVER['REQUEST_URI'] )." WHERE id=".$ses_uid );
}

function PrintParseTime( )
{
    global $db;
    if ( DEBUG_LEVEL < 1 && !$db->DEBUG || defined( "NO_DEBUG_INFO" ) && NO_DEBUG_INFO )
    {
        return;
    }
    include_once( SITE_PATH."inc/debug.inc.php" );
    echo hwgetdebuginfo( );
}

function IsUserOnline( $uid )
{
    global $db;
    $sql_on = "(".HW_TIME."-UNIX_TIMESTAMP(accessdate))<".ONLINE_TIME." AS online";
    if ( is_array( $uid ) )
    {
        return $db->two_col_assoc( "SELECT id,".$sql_on." FROM ".TBL_USER_ON." WHERE id IN(\"".implode( "\",\"", $uid )."\")" );
    }
    else
    {
        return $db->one_data( "SELECT ".$sql_on." FROM ".TBL_USER_ON." WHERE id=\"".$uid."\"" );
    }
}

function hwDeleteUsers( $ql )
{
    global $O_UFS;
    global $db;
    if ( !is_object( $O_UFS ) )
    {
        $O_UFS =& Factory::singleton( "FieldsSet", "{user_fields}" );
    }
    $a_ids = array( );
    $res = $db->query( $ql );
    if ( mysql_num_rows( $res ) == 0 )
    {
        return 0;
    }
    while ( $v = mysql_fetch_assoc( $res ) )
    {
        $a_ids[] = $v['id'];
        hwdeleterelatedfiles( $v, $O_UFS->A_UPLOAD_DB );
    }
    $a_ids = implode( ",", $a_ids );
    $args = array(
        "STR_IDS" => $a_ids
    );
    hwmodevent( "onUserDelete", $args );
    hwdeleteads( "SELECT * FROM ".TBL_AD." WHERE userid IN(".$a_ids.")" );
    $db->query( "DELETE FROM ".TBL_PAY_PEND." WHERE userid IN(".$a_ids.")" );
    $db->query( "DELETE FROM ".TBL_SESSION." WHERE userid IN(".$a_ids.")" );
    $db->query( "DELETE FROM ".TBL_USER." WHERE id IN(".$a_ids.")" );
    return 1;
}

function hwDeleteAds( $ql, $run_delete_sql = true )
{
    global $db;
    $O_LFS =& Factory::singleton( "FieldsSet" );
    $res = $db->query( $ql );
    $total = mysql_num_rows( $res );
    if ( $total == 0 )
    {
        return 0;
    }
    while ( $v = mysql_fetch_assoc( $res ) )
    {
        $db->query( "DELETE FROM ".TBL_IP." WHERE link_id=".$v['link_id'] );
        $db->query( "DELETE FROM ".TBL_PAY_PEND." WHERE adid=".$v['link_id'] );
        hwdeleterelatedfiles( $v, $O_LFS->A_UPLOAD_DB );
        $args = array(
            "ID" => $v['link_id'],
            "AD_DATA" => $v
        );
        hwmodevent( "onAdDelete", $args );
    }
    if ( $run_delete_sql )
    {
        $ql = preg_replace( "/^.*?FROM/is", "DELETE FROM", $ql );
        $db->query( $ql );
    }
    return $total;
}

function hwDeleteRelatedFiles( $v, $a_upload )
{
    if ( $a_upload )
    {
        foreach ( $a_upload as $fid )
        {
            $f = $v[$fid];
            if ( $f != "" && strpos( $f, ".." ) === false && file_exists( FILE_DIR.$f ) )
            {
                unlink( FILE_DIR.$f );
            }
        }
    }
    $A_MEDIA = Factory::getmediaobj( "ALL" );
    if ( $A_MEDIA )
    {
        foreach ( array_keys( $A_MEDIA ) as $media_id )
        {
            if ( $v[$media_id] )
            {
                $a_f = explode( "\n", trim( $v[$media_id] ) );
                if ( $a_f )
                {
                    $A_MEDIA[$media_id]->DeleteFiles( $a_f );
                }
            }
        }
    }
}

function hwGetFsByCat( $id )
{
    global $db;
    static $a_v = NULL;
    $id = ( integer )$id;
    if ( isset( $a_v[$id] ) )
    {
        return $a_v[$id];
    }
    if ( CACHING_TIME_M < 1 )
    {
        $a_v[$id] = $db->one_data( "SELECT fset FROM ".TBL_CAT." WHERE id='{$id}'" );
        return $a_v[$id];
    }
    $o_cache =& Factory::singleton( "Hw_Cache" );
    $a_v = $o_cache->get( "f_GetFsByCat" );
    if ( is_null( $a_v ) )
    {
        $a_v = $db->two_col_assoc( "SELECT id,fset FROM ".TBL_CAT );
        $o_cache->save( "f_GetFsByCat", $a_v );
    }
    return $a_v[$id];
}

function CheckLoggedIn( )
{
    if ( !isuser( ) )
    {
        header( "Location: index.php?page=login&ref_url=".urlencode( $_SERVER['REQUEST_URI'] ) );
        exit( );
    }
}

function GetCatPathCached( $cid, $w_link = 0 )
{
    global $HW_LANG;
    $o_cache =& Factory::singleton( "Hw_Cache" );
    $cat_path = $o_cache->get( "f_Cat_Path_{$HW_LANG}_{$cid}", "ShowCategoryPath({$cid},hwGetCatURL('##cid##'))" );
    if ( !$w_link )
    {
        $cat_path = strip_tags( $cat_path );
    }
    return $cat_path;
}

function GetFSetFileName( $f, $fs = false )
{
    if ( !EN_FSETS )
    {
        return TPL_PATH.$f;
    }
    if ( $fs === false )
    {
        $fs = $FSET_DIR;
    }
    $f_out = TPL_PATH.FS_DIR."/".$fs."/".$f;
    $f_ok = 0;
    if ( $f == "fields.txt" )
    {
        global $db;
        $f_ok = $db->one_data( "SELECT COUNT(*) FROM ".TBL_FIELD." WHERE fset=\"".$fs."\"" );
    }
    if ( !$f_ok && !file_exists( $f_out ) )
    {
        $f_out = TPL_PATH.$f;
    }
    return $f_out;
}

function hwFilterSet( $id, $val = null )
{
    $O_LFS =& Factory::singleton( "FieldsSet" );
    $f_db = $O_LFS->GetDbFByID( $id );
    if ( !$f_db )
    {
        $f_db = $id;
    }
    $a_v = hwsessiongetvar( "HW_FILTER" );
    if ( !is_array( $a_v ) )
    {
        $a_v = array( );
    }
    if ( $val === null )
    {
        unset( $a_v[$f_db] );
    }
    else
    {
        $a_v[$f_db] = $val;
    }
    hwsessionsetvar( "HW_FILTER", $a_v );
}

function hwFilterGetSQL( $tbl = "", $w_ses = 1 )
{
    $ql = " AND ".$tbl."approved=\"1\" AND ".$tbl."user_approved=\"1\"";
    if ( EN_EXP_DATE )
    {
        $ql .= " AND ".$tbl."exp_date>=".SQL_NOW;
    }
    if ( !$w_ses )
    {
        return $ql;
    }
    $a_v = hwsessiongetvar( "HW_FILTER" );
    if ( $a_v )
    {
        foreach ( $a_v as $db_f => $val )
        {
            $ql .= " AND ".$tbl.$db_f." IN (".$val.")";
        }
    }
    return $ql;
}

function hwSessionGetVar( $s, $scope = "USER" )
{
    return isset( $_SESSION[$scope][$s] ) ? $_SESSION[$scope][$s] : "";
}

function hwSessionSetVar( $s, $v = "", $scope = "USER" )
{
    if ( is_array( $s ) )
    {
        foreach ( $s as $k => $v )
        {
            $_SESSION[$scope][$k] = $v;
        }
    }
    else
    {
        $_SESSION[$scope][$s] = $v;
    }
}

function hwSessionDelVar( $s, $scope = "USER" )
{
    unset( $Var_0[$s] );
}

function hwSessionCleanup( )
{
    $_SESSION = array( );
    session_destroy( );
}

function hwSessionInit( )
{
    global $A_LNG;
    global $A_LOC_EXT;
    global $HW_LANG;
    $crawl = include( SITE_PATH."inc/robots.inc.php" );
    define( "SE_CRAWL", $crawl );
    if ( ( EN_DB_SESSION || SE_CRAWL ) && $_SERVER['HTTP_HOST'] )
    {
        include( SITE_PATH."inc/session_db.php" );
    }
    if ( !$_SERVER['HTTP_HOST'] )
    {
    }
    else if ( SE_CRAWL )
    {
        se_session_init( );
        register_shutdown_function( "se_session_flush" );
    }
    else
    {
        session_name( "HW_SID" );
        session_start( );
        $ip = $_SERVER['REMOTE_ADDR'];
        if ( !defined( "SES_OCTETS" ) )
        {
            define( "SES_OCTETS", 3 );
        }
        $ses_oct = SES_OCTETS;
        if ( 0 < $ses_oct )
        {
            if ( strpos( $_SERVER['HTTP_USER_AGENT'], "AOL" ) !== false )
            {
                $ses_oct = 0;
            }
            else if ( strpos( $_SERVER['HTTP_VIA'], "proxy.aol.com" ) !== false )
            {
                $ses_oct = 0;
            }
        }
        if ( $ses_oct < 1 )
        {
            $ip = "";
        }
        else if ( $ses_oct < 4 )
        {
            $a_ip = explode( ".", $ip );
            while ( $ses_oct < 4 )
            {
                array_pop( $a_ip );
                ++$ses_oct;
            }
            $ip = implode( ".", $a_ip );
        }
        $fp = "ES".$ip;
        $keys = array( "HTTP_USER_AGENT", "HTTP_ACCEPT_LANGUAGE", "HTTP_ACCEPT_CHARSET" );
        foreach ( $keys as $k )
        {
            if ( isset( $_SERVER[$k] ) )
            {
                $fp .= $_SERVER[$k];
            }
        }
        if ( $fp )
        {
            $fp = md5( $fp );
        }
        if ( $fp && $fp != hwsessiongetvar( "ses_fp" ) )
        {
            if ( !function_exists( "session_regenerate_id" ) )
            {
                hwloadfunction( "session_regenerate_id" );
            }
            session_regenerate_id( TRUE );
            $_SESSION = array( );
            hwsessionsetvar( "ses_fp", $fp );
            $token = substr( md5( uniqid( mt_rand( ), TRUE ) ), 0, 12 );
            hwsessionsetvar( "ses_token", $token );
        }
    }
    define( "TOKEN", hwsessiongetvar( "ses_token" ) );
    $cook = "ec_loc";
    if ( defined( "ADMIN_AREA" ) )
    {
        $lang = "en";
    }
    else if ( SE_CRAWL )
    {
        $lang = LANG_DEF;
    }
    else if ( $_COOKIE[$cook] )
    {
        $lang = ( boolean )$_COOKIE[$cook];
    }
    else
    {
        $lang = "";
    }
    if ( hwmodgetstate( "Multi_Lang" ) == "A" )
    {
        global $db;
        $A_LOC_EXT = $db->two_col_assoc( "SELECT id,name FROM ".hwmodtable( "Multi_Lang", "language" )." WHERE enabled=\"1\" ORDER BY name" );
    }
    else
    {
        $A_LOC_EXT = array( "en" => 0 );
    }
    if ( !$lang || $_REQUEST['lang'] && $_REQUEST['lang'] != $lang || !isset( $A_LOC_EXT[$lang] ) )
    {
        if ( $_REQUEST['lang'] )
        {
            $lang = ( boolean )$_REQUEST['lang'];
            if ( !isset( $A_LOC_EXT[$lang] ) )
            {
                $lang = "";
            }
            else if ( !SE_CRAWL )
            {
                setcookie( $cook, $lang, time( ) + 31536000 );
            }
        }
        if ( !$lang )
        {
            $lang = LANG_DEF;
        }
    }
    if ( !$A_LOC_EXT[$lang] || defined( "ADMIN_AREA" ) && !isset( $_REQUEST['lang'] ) )
    {
        $lang = "en";
    }
    hwlanginit( $lang );
}

function hwLangPhrase( $ph_id = "", $ph_val = "" )
{
    static $A_TRAN = NULL;
    if ( !isset( $A_TRAN ) )
    {
        global $db;
        global $HW_LANG;
        if ( $HW_LANG == "en" || hwmodgetstate( "Multi_Lang" ) != "A" )
        {
            $A_TRAN = array( );
        }
        else
        {
            $A_TRAN = $db->two_col_assoc( "SELECT id,phrase FROM ".hwmodtable( "Multi_Lang", "data" )." WHERE lang_id=\"".$HW_LANG."\"" );
        }
    }
    if ( $ph_id )
    {
        return $A_TRAN[$ph_id] ? $A_TRAN[$ph_id] : $ph_val;
    }
    return $A_TRAN;
}

function hwLangInit( $lang )
{
    global $db;
    global $HW_LANG;
    if ( preg_match( "/\\W/", $lang ) )
    {
        $lang = "en";
    }
    $HW_LANG = $lang;
    if ( hwmodgetstate( "Multi_Lang" ) == "A" )
    {
        if ( !defined( "ADMIN_AREA" ) )
        {
            $MOD_CFG = $O_HW->GetModOptions( "Multi_Lang" );
            $p_lang = hwsessiongetvar( "HW_FILTER" );
            if ( $MOD_CFG['EN_ALL'] )
            {
                if ( $p_lang['DB_F'] == "hw_lang_id" )
                {
                    hwfilterset( "hw_lang_id" );
                }
            }
            else
            {
                $ses_lang = "\"".( $HW_LANG == "en" ? "" : $HW_LANG )."\"";
                if ( $p_lang['VALUE'] != $ses_lang )
                {
                    hwfilterset( "hw_lang_id", $ses_lang );
                }
            }
            global $A_LOC_EXT;
            $A_TRAN = hwlangphrase( );
            if ( $A_TRAN )
            {
                foreach ( $A_LOC_EXT as $k => $v )
                {
                    if ( $A_TRAN["lang-{$k}"] )
                    {
                        $A_LOC_EXT[$k] = $A_TRAN["lang-{$k}"];
                    }
                }
            }
        }
        $a_LngCfg = $db->one_assoc( "SELECT * FROM ".hwmodtable( "Multi_Lang", "language" )." WHERE id=\"".$HW_LANG."\"" );
        if ( $a_LngCfg['locale'] )
        {
            @setlocale( LC_TIME, $a_LngCfg['locale'] );
            @setlocale( LC_CTYPE, $a_LngCfg['locale'] );
        }
    }
    $a_v = array( "CHARSET", "DATE_FMT", "DATE_TIME_FMT", "DATE_MENU", "META_K", "META_D" );
    foreach ( $a_v as $k )
    {
        $_k = strtolower( $k );
        $GLOBALS['GLOBALS'][$k] = $a_LngCfg[$_k] ? $a_LngCfg[$_k] : constant( $k );
    }
    hwlngloadfile( TPL_PATH );
    if ( defined( "ADMIN_AREA" ) )
    {
        hwlngloadfile( ADM_TPL_PATH );
    }
    if ( !headers_sent( ) )
    {
        header( "Content-Type: text/html;charset=".$CHARSET );
    }
}

function hwLngLoadFile( $path )
{
    if ( !file_exists( $path."lang.ini" ) )
    {
        return;
    }
    global $A_LNG;
    if ( !is_array( $A_LNG ) )
    {
        $A_LNG = array( );
    }
    $f = hwlnggetpath( $path."lang.ini" );
    $a_v = parse_ini_file( $f );
    $A_LNG = array_merge( $A_LNG, $a_v );
}

function hwFieldSetGetAll( )
{
    global $db;
    static $a_v = NULL;
    if ( !isset( $a_v ) )
    {
        $a_v = $db->one_col_array( "SELECT id FROM ".TBL_FS." WHERE id NOT LIKE \"".FS_CH1."%\" ORDER BY id" );
    }
    return $a_v;
}

function hwIsDBUniqueTaken( $tbl, $col, $val, $q_addon = "", $err_f = "" )
{
    global $db;
    $ret = 0;
    $res = $db->query( "SELECT {$col} FROM {$tbl} WHERE {$col}=".$db->esc( $val )." {$q_addon}" );
    if ( 0 < mysql_num_rows( $res ) )
    {
        $ret = 1;
    }
    if ( !$err_f )
    {
        return $ret;
    }
    return $ret ? sprintf( hwlng( "err_unique_exists" ), ucfirst( $err_f ), htmlspecialchars( $val, ENT_QUOTES, $CHARSET ) ) : "";
}

function hwIsUniqueIDX( $tbl, $col )
{
    global $db;
    $res = $db->query( "SHOW KEYS FROM {$tbl}" );
    while ( $v = mysql_fetch_assoc( $res ) )
    {
        if ( $v['Column_name'] == $col && $v['Non_unique'] == 0 )
        {
            return 1;
        }
    }
    return 0;
}

function hwTableColumnExists( $tbl, $col )
{
    global $db;
    $res = $db->query( "SHOW FIELDS FROM ".$tbl );
    while ( $v = mysql_fetch_assoc( $res ) )
    {
        if ( $v['Field'] == $col )
        {
            return 1;
        }
    }
    return 0;
}

function hwEvent( $event, &$args )
{
    if ( !function_exists( "hw_Ev_PayPlanOff" ) && !strncasecmp( $event, "payplan", 7 ) )
    {
        include_once( SITE_PATH."inc/pay_plan.lib.php" );
    }
    $func = "hw_Ev_".$event;
    if ( function_exists( $func ) )
    {
        $func( $args );
    }
}

function hwModGetArray( )
{
    static $a_mods = NULL;
    if ( !isset( $a_mods ) )
    {
        global $db;
        $a_mods = array( );
        $res = $db->query( "SELECT * FROM ".TBL_MODULES." WHERE state=\"A\" OR state=\"I\" ORDER BY name" );
        while ( $v = mysql_fetch_assoc( $res ) )
        {
            unset( $v['descr'] );
            $a_mods[$v['dir']] = $v;
        }
    }
    return $a_mods;
}

function hwModVer( $v )
{
    return 12 <= $v && $v <= 13;
}

function hwModTable( $mod, $tbl )
{
    return TBL_PREFIX.strtolower( $mod )."_".$tbl;
}

function hwModGetState( $mod )
{
    $a_v = hwmodgetarray( );
    return $a_v[$mod]['state'];
}

function hwModEvent( $event, &$args )
{
    static $A_FUNC = NULL;
    if ( !is_array( $args ) )
    {
        $args = array( );
    }
    if ( !isset( $A_FUNC ) )
    {
        $A_FUNC = array( );
        $a_mods = hwmodgetarray( );
        foreach ( $a_mods as $mod => $v )
        {
            if ( !$v['event_capable'] || $v['state'] != "A" && !strncmp( $mod, "Member_", 7 ) )
            {
                continue;
            }
            $state = $v['state'];
            include( SITE_PATH."modules/".$mod."/hw_event.php" );
            if ( function_exists( $mod."_Event" ) )
            {
                $A_FUNC[$mod] = $state;
            }
        }
    }
    $A_BASE_EVENTS = array( "onUserDelete", "onAdDelete", "onAdmSummary", "onModuleActivate", "onModuleRemove" );
    $a_v = $A_FUNC;
    $en_cron_log = $event == "onCronExecute" && function_exists( "Cron_Log_Entry" );
    foreach ( $a_v as $mod => $state )
    {
        if ( $state == "I" && !in_array( $event, $A_BASE_EVENTS ) )
        {
            continue;
        }
        if ( $en_cron_log )
        {
            cron_log_entry( $mod );
        }
        $func = $mod."_Event";
        $func( $event, $args );
    }
}

function hwModLoadLng( $mod )
{
    static $a_loaded = NULL;
    if ( isset( $a_loaded[$mod] ) )
    {
        return;
    }
    $a_loaded[$mod] = 1;
    hwlngloadfile( SITE_PATH."modules/".$mod."/tpl/" );
    if ( defined( "ADMIN_AREA" ) )
    {
        hwlngloadfile( SITE_PATH."modules/".$mod."/tpl/admin/" );
    }
}

function hwRealmAllowed( $rm )
{
    if ( !isuser( 0 ) )
    {
        return 1;
    }
    if ( hwsessiongetvar( "exp_date" ) < HW_TIME )
    {
        return 0;
    }
    $a_v = hwgetoptsarrfromplans( hwsessiongetvar( "hw_pay_plan" ) );
    return isset( $a_v[$rm] );
}

function hwRealm( $rm )
{
    if ( hwrealmallowed( $rm ) )
    {
        return;
    }
    switch ( $rm )
    {
    case "U_BROWSE_CATS" :
        if ( EN_U_BROWSE_CATS )
        {
            break;
        }
        return;
        break;
    case "U_LIST_ADS" :
        if ( EN_U_LIST_ADS )
        {
            break;
        }
        return;
        break;
    case "U_VIEW_AD_DET" :
        if ( !EN_U_VIEW_AD_DET )
        {
            break;
        }
        return;
        break;
    }
    header( "Location: index.php?page=account&pg=payment&why=realm" );
    exit( );
}

function hwProcessBlocks( &$tpl, $all_b = "", $ex_p = "", $depth = 0 )
{
    if ( is_object( $tpl ) )
    {
        $str_wanted = false;
    }
    else
    {
        $str_wanted = true;
        $buf = $tpl;
        $tpl = new HawkTpl( );
        $tpl->BUF = $buf;
        unset( $buf );
    }
    $a_blocks = array( );
    if ( !$ex_p && hwmodgetstate( "Banner_Ads" ) == "A" )
    {
        $a_blocks[] = "Banner_Ad";
    }
    if ( count( $a_blocks ) == 0 && strpos( $tpl->BUF, "<!-- TPL_INSERT : b_" ) === false )
    {
        return;
    }
    if ( is_array( $all_b ) && !$all_b )
    {
        return;
    }
    preg_match_all( "/<!-- TPL_INSERT : b_(\\S+)\\s+(\\S+\\s+)?-->.*?<!-- \\/TPL_INSERT : b_\\1\\s+-->/s", $tpl->BUF, $m );
    $a_block_vars = array( );
    $cell_ids = "";
    $cnt = count( $m[0] );
    $i = 0;
    for ( ;    $i < $cnt;    ++$i    )
    {
        $block_id = $m[1][$i];
        if ( is_array( $all_b ) && !$all_b[$block_id] )
        {
            continue;
        }
        $a_blocks[] = $block_id;
        $cell_ids .= "b_".$block_id.",";
        $b_vars = trim( $m[2][$i] );
        if ( $b_vars )
        {
            if ( strpos( "[({", $b_vars[0] ) !== false )
            {
                $b_vars = trim( substr( $b_vars, 1, -1 ) );
            }
            if ( $b_vars )
            {
                $s = explode( strpos( $b_vars, ";" ) ? ";" : ",", $b_vars );
                $b_vars = array( );
                foreach ( $s as $pair )
                {
                    list( $k, $v ) = explode( "=", $pair );
                    $k = trim( $k );
                    $b_vars[$k] = trim( $v );
                }
            }
        }
        $a_block_vars[$block_id] = $b_vars;
    }
    if ( !$a_blocks )
    {
        return;
    }
    if ( $cell_ids )
    {
        $cell_ids = substr( $cell_ids, 0, -1 );
        $tpl->InitArray( $cell_ids );
    }
    sort( $a_blocks );
    $cache_file = "f_Blocks_{$ex_p}";
    static $a_ok = NULL;
    if ( !$a_ok[$cache_file] )
    {
        $a_ok[$cache_file] = 1;
        $o_cache =& Factory::singleton( "Hw_Cache" );
        if ( $o_cache->isExpired( $cache_file, $mtime ) )
        {
            $path = "/blocks/".( $ex_p ? $ex_p."/" : "" );
            $a_all = hwgetblocksindir( "inc".$path );
            $mod_ts = 0;
            global $db;
            $res = $db->query( "SELECT dir,UNIX_TIMESTAMP(updated) FROM ".TBL_MODULES." WHERE block_capable=\"1\" AND state=\"A\"" );
            while ( list( $mod, $mod_ts1 ) = mysql_fetch_row( $res ) )
            {
                if ( $mod_ts < $mod_ts1 )
                {
                    $mod_ts = $mod_ts1;
                }
                if ( $ex_p && !is_dir( SITE_PATH."modules/".$mod."/addons".$path ) )
                {
                    continue;
                }
                $a_all = array_merge( $a_all, hwgetblocksindir( "modules/".$mod."/addons".$path ) );
            }
            $rebuild = 0;
            if ( $mtime < $mod_ts )
            {
                $rebuild = 1;
            }
            else
            {
                foreach ( $a_all as $f )
                {
                    if ( $mtime < filemtime( SITE_PATH.$f ) )
                    {
                        $rebuild = 1;
                        break;
                    }
                }
            }
            if ( $rebuild )
            {
                $data = "";
                foreach ( $a_all as $f )
                {
                    $data .= file_get_contents( SITE_PATH.$f );
                }
                $data = preg_replace( "/[\\r\\n]\\/\\/.*/", "", $data );
                $data = preg_replace( "/[\\r\\n]+/", "\n", $data );
                $data = preg_replace( "/\\?>\\n{0,1}<\\?(?:php)?/", "", $data );
                $o_cache->save( $cache_file, $data, true );
                unset( $data );
            }
            else
            {
                $o_cache->setUpdatedNow( $cache_file );
            }
        }
    }
    static $a_included = array( );
    $file_name = CACHE_DIR.$cache_file;
    if ( !isset( $a_included[$file_name] ) )
    {
        $a_included[$file_name] = 1;
        include( $file_name );
    }
    foreach ( $a_blocks as $block_id )
    {
        $func = "block_".( $ex_p ? $ex_p."_" : "" ).$block_id;
        if ( function_exists( $func ) )
        {
            $func( $tpl, $a_block_vars[$block_id] );
        }
    }
    if ( $str_wanted )
    {
        $tpl = $tpl->Parse( "", "", 0 );
        if ( $depth == 0 && strpos( $tpl, "<!-- TPL_INSERT : b_" ) !== false )
        {
            hwprocessblocks( $tpl, $all_b, $ex_p, $depth + 1 );
        }
    }
}

function hwGetBlocksInDir( $path )
{
    $a_v = hwreaddir( SITE_PATH.$path, "files" );
    foreach ( $a_v as $k => $v )
    {
        if ( strtolower( substr( $v, -4 ) ) != ".php" )
        {
            unset( $a_v[$k] );
        }
        else
        {
            $a_v[$k] = $path.$a_v[$k];
        }
    }
    return $a_v;
}

function hwGetTopAds( $catid = 0, $s_field = "hits", $amt = 10 )
{
    global $db;
    global $TITLE_FIELD;
    if ( !$catid )
    {
        $catid = 0;
    }
    $a_v = array( );
    $ql = "SELECT ".hwsqlfieldsget( )." FROM ".TBL_AD." WHERE 1".hwfiltergetsql( );
    if ( $catid != 0 )
    {
        $ql .= " AND catid IN (".get_daughter_cats( $catid ).")";
    }
    $ql .= " ORDER BY ".$s_field." DESC LIMIT 0,".$amt;
    $i = 0;
    $res = $db->query( $ql );
    while ( $v = mysql_fetch_assoc( $res ) )
    {
        $a_v[$i] = hwsqlrowget( $v );
        $a_v[$i]['num'] = $i + 1;
        ++$i;
    }
    return $a_v;
}

function GetUnixTimeFromMySQLDate( $s )
{
    list( $year, $month, $day, $hour, $minute, $second ) = preg_split( "/[-:\\s]+/", $s );
    if ( !$year )
    {
        return 0;
    }
    $s = "{$year}-{$month}-{$day}";
    if ( isset( $hour ) )
    {
        $s .= " {$hour}:{$minute}:{$second}";
    }
    return strtotime( $s );
}

function hwToTwoDigits( $v )
{
    return ( $v < 10 ? "0" : "" ).$v;
}

function hwGetPayMethods( $id = "" )
{
    $buf = hwreadcfgfile( TPL_PATH."pay_methods.txt" );
    $a_v = array( );
    foreach ( $buf as $s )
    {
        list( $pm_id, $pm_val ) = explode( " = ", $s );
        if ( $pm_val != "" )
        {
            $a_v[$pm_id] = $pm_val;
        }
    }
    $args = array(
        "A_GATES" => $a_v
    );
    hwmodevent( "onGetPayMethods", &$args );
    $a_v = $args['A_GATES'];
    if ( $id )
    {
        return $a_v[$id];
    }
    $s = "<select name=pay_method>";
    foreach ( $a_v as $k => $v )
    {
        $s .= "<OPTION ".( $k == $_REQUEST['pay_method'] ? "SELECTED " : "" )."VALUE=\"".$k."\">".$v;
    }
    $s .= "</select>";
    return $s;
}

function hwIsBannedIP( $ban_file, $ban_ip )
{
    $_hw_banned = 0;
    if ( file_exists( $ban_file ) )
    {
        $ban_time = "ban_ts_".$ban_ip;
        if ( !hwsessiongetvar( $ban_time ) || hwsessiongetvar( $ban_time ) < filemtime( $ban_file ) )
        {
            $a_v = hwreadcfgfile( $ban_file );
            if ( $a_v )
            {
                $ip = $_SERVER['REMOTE_ADDR'];
                if ( $_SERVER['HTTP_X_FORWARDED_FOR'] )
                {
                    $ip .= "\n".preg_replace( "/\\s*,\\s*/", "\n", $_SERVER['HTTP_X_FORWARDED_FOR'] );
                }
                $cnt = count( $a_v );
                $k = 0;
                for ( ;    $k < $cnt;    ++$k    )
                {
                    $a_v[$k] = preg_quote( $a_v[$k], "/" );
                    if ( 3 <= substr_count( $a_v[$k], "." ) )
                    {
                        $a_v[$k] .= "\$";
                    }
                }
                $a_z = array_chunk( $a_v, 2000 );
                foreach ( $a_z as $a_v )
                {
                    $a_v = implode( "|", $a_v );
                    $a_v = str_replace( "\\*", "*", $a_v );
                    $a_v = preg_replace( "/[\\*]+/", "\\d+", $a_v );
                    if ( preg_match( "/^".$a_v."/m", $ip ) )
                    {
                        hwsessionsetvar( array(
                            1,
                            $ban_time => HW_TIME
                        ) );
                        $_hw_banned = 1;
                    }
                }
            }
        }
        else if ( hwsessiongetvar( $ban_ip ) )
        {
            $_hw_banned = 1;
        }
    }
    if ( !$_hw_banned )
    {
        hwsessionsetvar( array(
            0,
            $ban_time => HW_TIME
        ) );
    }
    return $_hw_banned;
}

function hwGetUserHostIP( $ext_info = false )
{
    $ip = $_SERVER['REMOTE_ADDR'];
    if ( $ext_info && $_SERVER['HTTP_X_FORWARDED_FOR'] )
    {
        $ip .= " (".strip_tags( $_SERVER['HTTP_X_FORWARDED_FOR'] ).")";
    }
    return $ip;
}

function hwCURL( $a_opt )
{
    if ( !is_array( $a_opt ) )
    {
        exit( "Array required for hwCURL()" );
    }
    include_once( SITE_PATH."inc/curl.inc.php" );
    return hwrealcurl( $a_opt );
}

function hwProcessTags( &$buf )
{
    global $title;
    global $META_K;
    global $META_D;
    if ( strpos( $buf, "<!-- IF_TITLE" ) !== false )
    {
        if ( preg_match( "/<!-- IF_TITLE:(.*?),(.*?),(.*?)-->/", $buf, $m ) )
        {
            $title = trim( $m[1] ) ? $m[2] : $m[3];
            unset( $m );
        }
    }
    else if ( strpos( $buf, "<!-- TITLE" ) !== false && preg_match( "/<!-- TITLE:(.*?)-->/", $buf, $m ) )
    {
        $title = trim( $m[1] );
    }
    if ( defined( "ADMIN_AREA" ) && PHP_SELF_BASE == "modules.php" )
    {
        if ( $title )
        {
            $title = "{Module} ".HW_MOD." - ".$title;
        }
        else
        {
            $title = "{Module} ".HW_MOD;
        }
    }
    if ( strpos( $buf, "<!-- META_K" ) !== false && preg_match( "/<!-- META_K:(.*?)-->/", $buf, $m ) )
    {
        $META_K = trim( $m[1] );
    }
    if ( strpos( $buf, "<!-- META_D" ) !== false && preg_match( "/<!-- META_D:(.*?)-->/", $buf, $m ) )
    {
        $META_D = trim( $m[1] );
    }
    settype( $HW_WRAP, "int" );
    $tpl_v = "\$CHARSET,\$SITE_URL,\$FILE_URL,\$HW_WRAP,\$TOKEN,\$title";
    if ( defined( "HW_MOD" ) )
    {
        $tpl_v .= ",\$HW_MOD,\$HW_MOD_URL";
    }
    if ( !defined( "ADMIN_AREA" ) )
    {
        if ( PHP_SELF_BASE == "index.php" && $page )
        {
            $tpl_v .= ",\$page";
        }
        $GLOBALS['GLOBALS']['HTTPS'] = $_SERVER['HTTPS'] == "on" ? 1 : 0;
        $tpl_v .= ",\$HW_LANG,\$SE_CRAWLER,\$HTTPS,\$META_K,\$META_D";
    }
    if ( strpos( $buf, "<!-- TPL_INSERT : b_" ) !== false || hwmodgetstate( "Banner_Ads" ) == "A" )
    {
        hwprocessblocks( &$buf );
    }
    $tpl_v = HawkTpl::getvarsarrayfromstr( $tpl_v );
    if ( defined( "ADMIN_AREA" ) )
    {
        $tpl_v['IS_ADMIN'] = is_array( hwsessiongetvar( "realm", "ADM" ) ) ? 0 : 1;
    }
    if ( strpos( $buf, "##Mod_" ) !== false )
    {
        $a_mods = hwmodgetarray( );
        $a_v = array( );
        foreach ( $a_mods as $mod => $v )
        {
            if ( $v['state'] == "A" )
            {
                $a_v["Mod_{$mod}"] = 1;
            }
        }
        unset( $a_mods );
        if ( $a_v )
        {
            $tpl_v += $a_v;
            unset( $a_v );
        }
    }
    $buf = evalbuffer( $buf, $tpl_v );
    unset( $tpl_v );
    if ( strpos( $buf, "{" ) !== false )
    {
        $buf = hwlngfilter( $buf );
    }
    if ( strpos( $buf, "<!-- IF " ) !== false )
    {
        $a_from = array( "/<!-- (else)?if (.*?) (==|!=|>=|<=) ([\\\"'])?(.*?)\\4? -->/ie", "/<!-- (else)?if (.*?) -->/ise", "/<!-- else -->/i", "/<!-- endif -->/i" );
        $a_to = array( "\"<?php \\1if('\\2'\\3'\\5'): ?>\"", "\"<?php \\1if('\\2'): ?>\"", "<?php else: ?>", "<?php endif ?>" );
        $buf = str_replace( "<?", "<?", $buf );
        $buf = str_replace( "?>", "?>", $buf );
        if ( ini_get( "asp_tags" ) )
        {
            $buf = str_replace( "<%", "<%", $buf );
            $buf = str_replace( "%>", "%>", $buf );
        }
        $cell = preg_replace( $a_from, $a_to, $buf );
        ob_start( );
        $res = eval( "?>".$cell );
        if ( $res === FALSE )
        {
            echo "<b>Parsing Error</b><hr size=1>";
            if ( 2 <= DEBUG_LEVEL )
            {
                highlight_string( $cell );
            }
            else
            {
                echo "To get more information set DEBUG_LEVEL value to 2 or higher in application.php";
            }
            exit( );
        }
        $cell = ob_get_contents( );
        ob_end_clean( );
        if ( $res !== false )
        {
            $buf = $cell;
        }
        unset( $cell );
    }
    if ( EN_SE_URLS && EN_SE_ADV )
    {
        if ( !function_exists( "ProcessSearchFriendlyURLs" ) )
        {
            include( SITE_PATH."inc/search_friendly.php" );
        }
        processsearchfriendlyurls( $buf );
    }
}

function hwLng( $k, $fatal = true )
{
    global $A_LNG;
    if ( isset( $A_LNG[$k] ) )
    {
        $lang_val = $A_LNG[$k];
    }
    else
    {
        $k1 = strtolower( $k );
        if ( isset( $A_LNG[$k1] ) )
        {
            if ( preg_match( "/[a-z]/", $k ) )
            {
                $lang_val = ucwords( $A_LNG[$k1] );
            }
            else
            {
                $lang_val = strtoupper( $A_LNG[$k1] );
            }
        }
    }
    if ( isset( $lang_val ) )
    {
        if ( strpos( $lang_val, "{" ) !== false )
        {
            $lang_val = hwlngfilter( $lang_val );
        }
        return $lang_val;
    }
    if ( !$fatal )
    {
        return false;
    }
    exit( "No lang.ini entry for '{$k}'" );
}

function hwLngFilter( $lang_val )
{
    $a_old = array( );
    if ( preg_match_all( "/\\{(\\w+)\\}/", $lang_val, $m ) )
    {
        $cnt = count( $m[0] );
        $i = 0;
        for ( ;    $i < $cnt;    ++$i    )
        {
            $lang_id = $m[1][$i];
            if ( $a_old[$lang_id] )
            {
                continue;
            }
            $a_old[$lang_id] = 1;
            $v = hwlng( $lang_id, false );
            if ( $v !== false )
            {
                $lang_val = str_replace( $m[0][$i], $v, $lang_val );
            }
        }
    }
    return $lang_val;
}

function hwGetAdURL( $id )
{
    static $code = NULL;
    if ( !isset( $code ) )
    {
        if ( EN_SE_URLS )
        {
            $url = defined( "EN_SE_ADV" ) ? "page-o\$id-".$HW_LANG.".html" : "page-\$id.html";
            $code = explode( "\$id", $url );
        }
        else
        {
            $code = "D";
        }
    }
    if ( is_array( $code ) )
    {
        $url = $code[0].$id.$code[1];
    }
    else
    {
        static $ex_p = NULL;
        if ( !isset( $ex_p ) )
        {
            $ex_p = "";
            if ( hwmodgetstate( "Multi_Lang" ) == "A" )
            {
                $ex_p .= "&lang=".$HW_LANG;
            }
        }
        $url = "index.php?page=out&id=".$id.$ex_p;
    }
    return $url;
}

function hwGetCatURL( $id )
{
    static $code = NULL;
    if ( !isset( $code ) )
    {
        if ( EN_SE_URLS )
        {
            $url = defined( "EN_SE_ADV" ) ? "page-b\$id-".$HW_LANG.".html" : "category-\$id.html";
            $code = explode( "\$id", $url );
        }
        else
        {
            $code = "D";
        }
    }
    if ( is_array( $code ) )
    {
        $url = $code[0].$id.$code[1];
    }
    else
    {
        static $ex_p = NULL;
        if ( !isset( $ex_p ) )
        {
            $ex_p = "";
            if ( hwmodgetstate( "Multi_Lang" ) == "A" )
            {
                $ex_p .= "&lang=".$HW_LANG;
            }
        }
        $url = "index.php?page=browse&cid=".$id.$ex_p;
    }
    return $url;
}

function hwGetBrowseURL( $id, $off = 0 )
{
    static $code = NULL;
    $off = ( integer )$off;
    if ( !isset( $code ) )
    {
        if ( EN_SE_URLS )
        {
            $url = defined( "EN_SE_ADV" ) ? "page-b\$id_\$id-".$HW_LANG.".html" : "browse-\$id-\$id.html";
            $code = explode( "\$id", $url );
        }
        else
        {
            $code = "D";
        }
    }
    if ( is_array( $code ) )
    {
        $url = $code[0].$id.$code[1].$off.$code[2];
    }
    else
    {
        static $ex_p = NULL;
        if ( !isset( $ex_p ) )
        {
            $ex_p = "";
            if ( hwmodgetstate( "Multi_Lang" ) == "A" )
            {
                $ex_p .= "&lang=".$HW_LANG;
            }
        }
        $url = "index.php?page=search&s_res=AND&cid={$id}";
        if ( $off )
        {
            $url .= "&off=".$off;
        }
        if ( $ex_p )
        {
            $url .= $ex_p;
        }
    }
    return $url;
}

function hwIsExecutable( $f )
{
    if ( function_exists( "is_executable" ) )
    {
        return is_executable( $f );
    }
    return is_readable( $f );
}

function hwFindExecutable( $f, $dirs = false )
{
    if ( !is_array( $dirs ) )
    {
        $dirs = array( );
    }
    $path_sep = HW_IS_WINDOWS ? ";" : ":";
    $dirs = array_merge( $dirs, split( $path_sep, getenv( "PATH" ) ) );
    if ( HW_IS_WINDOWS && substr( $f, -4 ) != ".exe" )
    {
        $f .= ".exe";
    }
    foreach ( $dirs as $dir )
    {
        $ch = substr( $dir, -1 );
        if ( $ch == "\\" || $ch == "/" )
        {
            $dir = substr( $dir, 0, -1 );
        }
        if ( hwisexecutable( $dir."/".$f ) )
        {
            return str_replace( "\\", "/", $dir )."/".$f;
        }
    }
    return false;
}

function hwMenuGetOpts( $a_v, $cur )
{
    $s = "";
    foreach ( $a_v as $v )
    {
        $s .= "<OPTION ".( $v == $cur ? "SELECTED " : "" )."VALUE=\"{$v}\">{$v}";
    }
    return $s;
}

function hwReadDir( $d, $type = "all" )
{
    $last = substr( $d, -1 );
    if ( $last != "/" && $last != "\\" )
    {
        $d .= "/";
    }
    $a_v = array( );
    $hd = opendir( $d );
    while ( $f = readdir( $hd ) )
    {
        if ( $f[0] != "." )
        {
            $a_v[] = $f;
        }
    }
    closedir( $hd );
    if ( $a_v )
    {
        if ( $type == "dirs" || $type == "files" )
        {
            foreach ( $a_v as $k => $f )
            {
                if ( $type == "files" )
                {
                    if ( !is_file( $d.$f ) )
                    {
                        unset( $a_v[$k] );
                    }
                }
                else if ( !( $type == "dirs" ) && is_dir( $d.$f ) )
                {
                    unset( $a_v[$k] );
                }
            }
        }
        if ( $a_v )
        {
            sort( $a_v );
        }
    }
    return $a_v;
}

function hwExecMaintenance( )
{
    global $db;
    $db->query( "DELETE FROM ".TBL_IP." WHERE bdate < DATE_SUB(".SQL_NOW.",INTERVAL 1 DAY)" );
    $db->query( "OPTIMIZE TABLE ".TBL_IP );
    $db->query( "DELETE FROM ".TBL_REG_CONFIRM." WHERE regdate < DATE_SUB(".SQL_NOW.",INTERVAL 3 DAY)" );
    $db->query( "DELETE FROM ".TBL_SESSION." WHERE expires < ".HW_TIME );
    $db->query( "OPTIMIZE TABLE ".TBL_SESSION );
}

function hwReadCfgFile( $f, $f_trim = 1 )
{
    $buf = @file( $f );
    if ( !$buf )
    {
        return array( );
    }
    foreach ( $buf as $k => $s )
    {
        if ( $f_trim )
        {
            $s = trim( $s );
        }
        else
        {
            $s = str_replace( "\r", "", $s );
            $s = str_replace( "\n", "", $s );
        }
        if ( !$s || $s[0] == "#" )
        {
            unset( $buf[$k] );
        }
        else
        {
            $buf[$k] = $s;
        }
    }
    return $buf ? array_values( $buf ) : array( );
}

function MultiLangMenuGet( )
{
    global $A_LOC_EXT;
    if ( hwmodgetstate( "Multi_Lang" ) != "A" )
    {
        return array( "" => "English" );
    }
    else
    {
        $a_v = $A_LOC_EXT;
        $a_v[''] = $a_v['en'];
        unset( $a_v['en'] );
        asort( $a_v );
        return $a_v;
    }
}

function hwGetExtraOptions( )
{
    global $db;
    static $A_RES = NULL;
    if ( isset( $A_RES ) )
    {
        return $A_RES;
    }
    $sql = "";
    $a_v = array_keys( hwgetextraoptionids( ) );
    foreach ( $a_v as $k )
    {
        if ( defined( "ADMIN_AREA" ) || constant( "EN_AD_{$k}" ) )
        {
            $sql .= ",'{$k}'";
        }
    }
    $A_RES = array( );
    if ( !$sql )
    {
        return $A_RES;
    }
    $a_v = $db->select( "SELECT * FROM ".TBL_EXTRA_OPT." WHERE type IN(".substr( $sql, 1 ).") AND active=\"1\" ORDER BY type,price" );
    if ( hwismodeventallowed( "onExtraOptionsGet" ) )
    {
        $args = array(
            "A_EXTRA" => $a_v
        );
        hwmodevent( "onExtraOptionsGet", &$args );
        $a_v = $args['A_EXTRA'];
    }
    if ( $a_v )
    {
        $A_TRAN = hwlangphrase( );
        if ( $A_TRAN )
        {
            foreach ( $a_v as $k => $v )
            {
                if ( $A_TRAN["ex_opt-{$v['id']}"] )
                {
                    $a_v[$k]['descr'] = $A_TRAN["ex_opt-{$v['id']}"];
                }
            }
        }
    }
    $a_v[] = false;
    $a_fee = $a_descr = array( );
    foreach ( $a_v as $v )
    {
        if ( isset( $p_v['type'] ) && $p_v['type'] != $v['type'] )
        {
            $id = "AD_{$p_v['type']}";
            $A_RES[$id] = array(
                "ID" => $id,
                "NAME" => "{ex_".$p_v['type']."}",
                "INPUT" => "menu",
                "EN_ORD" => 1,
                "DT" => EX_OPT_EXP * 86400,
                "FEE" => $a_fee,
                "DESCR" => $a_descr
            );
            $a_fee = $a_descr = array( );
        }
        $p_v = $v;
        $a_fee[$v['val']] = $v['price'];
        $a_descr[$v['val']] = $v['descr'];
    }
    return $A_RES;
}

function hwGetPayOptions( $f_by = "" )
{
    static $A_RES = NULL;
    if ( !isset( $A_RES ) )
    {
        $A_RES = hwgetextraoptions( );
        $buf = hwreadcfgfile( TPL_PATH."pay_options.txt" );
        $args = array(
            "A_OPTS" => array( )
        );
        hwmodevent( "onPayOptionsGet", &$args );
        if ( $args['A_OPTS'] )
        {
            $buf = array_merge( $buf, $args['A_OPTS'] );
        }
        $A_MEDIA = array_keys( Factory::getmediaobj( "ALL" ) );
        $a_f = array( );
        $buf_extra = array( );
        $cnt = count( $buf );
        if ( 0 < $cnt )
        {
            $i = 0;
            for ( ;    $i <= $cnt;    ++$i    )
            {
                if ( !strncmp( $buf[$i], "AD_MEDIA_", 9 ) && preg_match( "/^AD_MEDIA_\\w+_\\|/", $buf[$i] ) )
                {
                    foreach ( $A_MEDIA as $media_id )
                    {
                        $s = preg_replace( "/^(AD_MEDIA_\\w+_)\\|/", "\\1".strtoupper( $media_id )."|", $buf[$i] );
                        $s = str_replace( "{media_id}", "{".$media_id."}", $s );
                        $buf_extra[$media_id][] = $s;
                    }
                    unset( $buf[$i] );
                }
            }
        }
        if ( $buf_extra )
        {
            foreach ( array_values( $buf_extra ) as $v )
            {
                $buf = array_merge( $buf, $v );
            }
            unset( $buf_extra );
        }
        if ( $buf )
        {
            foreach ( $buf as $s )
            {
                list( , ,  ) = explode( "|", $s );
                list( ,  ) = explode( "|", $s );
                list(  ) = explode( "|", $s );
                list(  ) = explode( "|", $s );
                $A_RES[$a_f['ID']] = $a_f;
            }
        }
    }
    if ( $f_by )
    {
        $len = strlen( $f_by );
        $a_out = array( );
        foreach ( array_keys( $A_RES ) as $k )
        {
            if ( !strncmp( $k, $f_by, $len ) )
            {
                $a_out[$k] = $A_RES[$k];
            }
        }
        return $a_out;
    }
    else
    {
        return $A_RES;
    }
}

function hwGetPayInfoFmt( $term, $sep = ", " )
{
    $term = trim( $term );
    if ( !strpos( $term, "-" ) )
    {
        return $term;
    }
    $a_term = explode( " ", $term );
    $A_OPTS = null;
    foreach ( $a_term as $k => $v )
    {
        if ( !strpos( $v, "-" ) )
        {
            continue;
        }
        list( $o_id, $o_val ) = explode( "-", $v );
        $o_amt = 1;
        if ( preg_match( "#^[^/]+/\\d+\$#", $o_val ) )
        {
            list( $o_val, $o_amt ) = explode( "/", $o_val );
        }
        if ( !isset( $A_OPTS ) )
        {
            $A_OPTS = hwgetextraoptions( );
        }
        $a_v = $A_OPTS[$o_id];
        if ( $a_v )
        {
            $a_term[$k] = ( $a_v['NAME'] ? $a_v['NAME'] : $o_id )." - ".( $a_v['DESCR'][$o_val] ? $a_v['DESCR'][$o_val] : $o_val );
            if ( 1 < $o_amt )
            {
                $a_term[$k] .= " (".$o_amt.")";
            }
        }
    }
    return implode( $sep, $a_term );
}

function hwGetPayPlans( $pp_type = "", $cid = 0, $u_ac_pp = "" )
{
    static $A_TERMS = NULL;
    if ( !EN_PP_CAT )
    {
        $cid = 0;
    }
    if ( !isset( $A_TERMS ) || $cid || $u_ac_pp )
    {
        $A_TERMS = array( );
        global $db;
        $a_f = array( );
        $ql = "SELECT p.* FROM ".TBL_PAY_PLAN." p WHERE p.enabled=\"1\"";
        if ( $cid )
        {
            $ql = str_replace( "p WHERE", "p, ".TBL_PP_CAT." pc WHERE p.id=pc.ppid AND pc.cid=\"".$cid."\" AND", $ql );
        }
        if ( $u_ac_pp )
        {
            $a_p = $db->one_col_array( "SELECT fee_id FROM ".TBL_PP_USER." WHERE sub_id='{$u_ac_pp}'" );
            if ( $a_p )
            {
                $ql .= " AND p.id NOT IN ('".implode( "','", $a_p )."')";
            }
        }
        $res = $db->query( $ql );
        while ( $v = mysql_fetch_assoc( $res ) )
        {
            $id = $v['id'];
            $a_f['TYPE'] = $v['type'];
            $a_f['GROUP'] = $v['pgroup'];
            $a_f['FEE'] = $v['fee'];
            $a_f['DT'] = $v['exp_days'] * 86400;
            $a_f['OPTS'] = array( );
            $a_v = hwpayoptstoarr( $v['options'] );
            if ( $a_v )
            {
                foreach ( $a_v as $z )
                {
                    $a_f['OPTS']["{$z['ID']}"] = $z['DT'];
                }
            }
            $key = $a_f['TYPE'] == "FEE" ? "AD" : "USER";
            $a_f['OPTS']["{$key}_EXP_DATE"] = $a_f['DT'];
            $A_TERMS[$id] = $a_f;
        }
    }
    if ( !$pp_type )
    {
        return $A_TERMS;
    }
    $a_v = array( );
    foreach ( array_keys( $A_TERMS ) as $id )
    {
        if ( $A_TERMS[$id]['TYPE'] == $pp_type )
        {
            $a_v[$id] = $A_TERMS[$id];
        }
    }
    if ( $cid || $u_ac_pp )
    {
        unset( $A_TERMS );
    }
    return $a_v;
}

function hwGetBasePlanFromStr( $s )
{
    if ( !$s )
    {
        return array( );
    }
    $a_v = hwpayoptstoarr( $s );
    foreach ( $a_v as $v )
    {
        if ( !isset( $v['VAL'] ) )
        {
            return array(
                $v['ID'],
                $v['DT']
            );
        }
    }
    return array( );
}

function hwGetOptsArrFromPlans( $s )
{
    static $A_CACHE = NULL;
    if ( !$s )
    {
        return array( );
    }
    if ( isset( $A_CACHE[$s] ) )
    {
        return $A_CACHE[$s];
    }
    $A_TERMS = hwgetpayplans( );
    $a_out = array( );
    $a_v = hwpayoptstoarr( $s );
    foreach ( $a_v as $v )
    {
        if ( isset( $v['VAL'] ) )
        {
            $a_out["{$v['ID']}"] = $v['VAL'];
        }
        else
        {
            $a_z = $A_TERMS["{$v['ID']}"]['OPTS'];
            if ( $a_z )
            {
                $a_out = array_merge( $a_out, $a_z );
            }
        }
    }
    $A_CACHE[$s] = $a_out;
    return $a_out;
}

function hwPayOptsToArr( $a_v )
{
    if ( !$a_v )
    {
        return array( );
    }
    $a_z = array( "ID", "DT", "VAL" );
    $i = 0;
    if ( $a_v[0] == "[" )
    {
        $a_v = substr( $a_v, 1, -1 );
    }
    $a_v = explode( "][", $a_v );
    foreach ( $a_v as $v )
    {
        $a_cur = array( );
        $v = explode( "-", $v );
        foreach ( $v as $k => $s )
        {
            $a_out[$i]["{$a_z[$k]}"] = $s;
        }
        ++$i;
    }
    return $a_out;
}

function hwPayOptsToStr( $a_v )
{
    if ( !$a_v )
    {
        return "";
    }
    $s = "";
    foreach ( $a_v as $v )
    {
        $s .= "[".$v['ID']."-".$v['DT'];
        if ( isset( $v['VAL'] ) )
        {
            $s .= "-".$v['VAL'];
        }
        $s .= "]";
    }
    return $s;
}

function hwPayPlanGetInfo( $pp, $id = 0 )
{
    global $db;
    static $A_PP_TYPE = NULL;
    if ( !isset( $A_PP_TYPE ) )
    {
        $A_PP_TYPE = $db->two_col_assoc( "SELECT id,type FROM ".TBL_PAY_PLAN );
    }
    $z = array( );
    if ( $A_PP_TYPE[$pp] == "SUB" )
    {
        $z['sql_tbl'] = TBL_USER;
        $z['sql_id'] = "id";
    }
    else
    {
        $z['sql_tbl'] = TBL_AD;
        $z['sql_id'] = "link_id";
    }
    $id = ( integer )$id;
    if ( $id )
    {
        $z['hw_pay_plan'] = $db->one_data( "SELECT hw_pay_plan FROM ".$z['sql_tbl']." WHERE ".$z['sql_id']."='{$id}'" );
    }
    return $z;
}

function hwPayPlanSwitchOn( $pp_new, $sql_where, $pp_time = 0 )
{
    global $db;
    $pp_info = hwpayplangetinfo( $pp_new );
    if ( ctype_digit( ( boolean )$sql_where ) )
    {
        $sql_where = $pp_info['sql_id']."=".$sql_where;
    }
    $sql = "SELECT ".$pp_info['sql_id'].",hw_pay_plan FROM ".$pp_info['sql_tbl']." WHERE ".$sql_where;
    $res = $db->query( $sql );
    while ( list( $id, $hw_pay_plan ) = mysql_fetch_row( $res ) )
    {
        $pp_old = $pp_old_dt = "";
        list( $pp_old, $pp_old_dt ) = hwgetbaseplanfromstr( $hw_pay_plan );
        if ( $pp_old && 0 < $pp_old_dt && $pp_old != $pp_new )
        {
            $args = array(
                "PP_ID" => $pp_old,
                "ID" => $id
            );
            hwevent( "PayPlanOff", &$args );
        }
        $args = array(
            "PP_ID" => $pp_new,
            "ID" => $id,
            "PP_TIME" => $pp_time
        );
        hwevent( "PayPlanOn", &$args );
    }
}

function hwSQLCalcRows( $sql )
{
    global $db;
    if ( 40000 <= $db->version( ) )
    {
        return $db->one_data( "SELECT FOUND_ROWS()" );
    }
    else
    {
        $sql = preg_replace( "/^.*? FROM /s", "SELECT COUNT(*) FROM ", $sql );
        $a_v = preg_split( "/ ORDER BY /i", $sql );
        if ( 1 < count( $a_v ) )
        {
            $sql = implode( " ORDER BY ", array_slice( $a_v, 0, -1 ) );
        }
        return $db->one_data( $sql );
    }
}

function Multi_Lang_Redirect( $sql )
{
    global $db;
    global $HW_LANG;
    $_lang = $db->one_data( $sql );
    if ( !$_lang )
    {
        $_lang = "en";
    }
    if ( $_lang != $HW_LANG && !isset( $_GET['lang'] ) && ctype_print( $_SERVER['REQUEST_URI'] ) )
    {
        $ch_amt = $db->one_data( "SELECT CO

10

Re: Ищу ошибку в скрипте и немогу найти

pellets-wood
80 строка первого файла. Очевидно, здесь формируется имя файла.

$tpl_f = HW_MOD_TPL."setup.htm";

11 (изменено: pellets-wood, 2008-04-01 10:55:25)

Re: Ищу ошибку в скрипте и немогу найти

$tpl_f = HW_MOD_TPL."setup.htm";

Согласен. Но в ней ошибок нет.

Вот часть системы, в которой я подозреваю ошибку

pellets-wood.narod.ru/test.rar

P.S. Мне нравится движок Вашего сайта, где его можно потестить!

12

Re: Ищу ошибку в скрипте и немогу найти

pellets-wood сказал:

Согласен. Но в ней ошибок нет.

Значит нет. Сожалею, но у меня нет желания с этим разбираться.

Движок сайта самописанный.