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>  ";
}
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>  ";
}
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