mirror of
https://github.com/slawkens/myaac.git
synced 2025-09-16 13:33:35 +02:00
Compare commits
21 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
9ab25abcdf | ||
![]() |
ea753278a0 | ||
![]() |
4d749b8815 | ||
![]() |
07012f786b | ||
![]() |
a45ceab83a | ||
![]() |
669c447fca | ||
![]() |
da43b32ff0 | ||
![]() |
cbe0d187b4 | ||
![]() |
c5d5bb8067 | ||
![]() |
e85ce193be | ||
![]() |
3fb2675b5a | ||
![]() |
b7de8b32eb | ||
![]() |
89be68731e | ||
![]() |
10dd818b13 | ||
![]() |
13a1598a46 | ||
![]() |
4f6178eca0 | ||
![]() |
dc2b5afd99 | ||
![]() |
11cee81c5f | ||
![]() |
d639e77d04 | ||
![]() |
dd47423157 | ||
![]() |
b02c7f4239 |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -4,6 +4,7 @@ Thumbs.db
|
|||||||
|
|
||||||
#
|
#
|
||||||
/.htaccess
|
/.htaccess
|
||||||
|
lua
|
||||||
|
|
||||||
# composer
|
# composer
|
||||||
composer.phar
|
composer.phar
|
||||||
@@ -75,6 +76,3 @@ landing
|
|||||||
|
|
||||||
# system
|
# system
|
||||||
system/functions_custom.php
|
system/functions_custom.php
|
||||||
|
|
||||||
# others/rest
|
|
||||||
system/pages/downloads.php
|
|
||||||
|
15
CHANGELOG.md
15
CHANGELOG.md
@@ -1,5 +1,19 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [1.1 - 27.01.2025]
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* adjust mailer settings descriptions to latest gmail (https://github.com/slawkens/myaac/commit/c5d5bb80671db135e6b503f53684771c7272e05d)
|
||||||
|
* optimize $player->isOnline() function, thanks @gesior (https://github.com/slawkens/myaac/commit/10dd818b139d5e1bb1ca9ec81edfb083ba9316b4)
|
||||||
|
* make players.comment and guilds.description VARCHAR (https://github.com/slawkens/myaac/commit/a45ceab83a74bee2b89cdb72baceda75e577e3cf)
|
||||||
|
* add lua/ folder to .gitignore (https://github.com/slawkens/myaac/commit/07012f786b1114cb6ab2f064f82c645b136a375a)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* general fixes in the tibiacom template menus, better support for custom menus
|
||||||
|
* make functions_custom.php optional
|
||||||
|
* error in CLI, where BASE_URL is not defined (https://github.com/slawkens/myaac/commit/4d749b881582f64b5a46196dbbb5ee8097127f03)
|
||||||
|
* hook ACCOUNT_LOGIN_BEFORE_ACCOUNT location (https://github.com/slawkens/myaac/commit/669c447fca8643ce56d9ef8c1374ec647c780998)
|
||||||
|
|
||||||
## [1.0.1 - 14.01.2025]
|
## [1.0.1 - 14.01.2025]
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
@@ -140,7 +154,6 @@ Minimum PHP version for this release is 8.1.
|
|||||||
* support for login and create account only by email (configurable)
|
* support for login and create account only by email (configurable)
|
||||||
* with no need for account name
|
* with no need for account name
|
||||||
* Google ReCAPTCHA v3 support (available as plugin)
|
* Google ReCAPTCHA v3 support (available as plugin)
|
||||||
* automatically load towns names from .OTBM file
|
|
||||||
* support for Account Number
|
* support for Account Number
|
||||||
* suggest account number option
|
* suggest account number option
|
||||||
* many new functions, hooks and configurables
|
* many new functions, hooks and configurables
|
||||||
|
@@ -26,8 +26,8 @@
|
|||||||
if (version_compare(phpversion(), '8.1', '<')) die('PHP version 8.1 or higher is required.');
|
if (version_compare(phpversion(), '8.1', '<')) die('PHP version 8.1 or higher is required.');
|
||||||
|
|
||||||
const MYAAC = true;
|
const MYAAC = true;
|
||||||
const MYAAC_VERSION = '1.0.1';
|
const MYAAC_VERSION = '1.1';
|
||||||
const DATABASE_VERSION = 42;
|
const DATABASE_VERSION = 43;
|
||||||
const TABLE_PREFIX = 'myaac_';
|
const TABLE_PREFIX = 'myaac_';
|
||||||
define('START_TIME', microtime(true));
|
define('START_TIME', microtime(true));
|
||||||
define('MYAAC_OS', stripos(PHP_OS, 'WIN') === 0 ? 'WINDOWS' : (strtoupper(PHP_OS) === 'DARWIN' ? 'MAC' : 'LINUX'));
|
define('MYAAC_OS', stripos(PHP_OS, 'WIN') === 0 ? 'WINDOWS' : (strtoupper(PHP_OS) === 'DARWIN' ? 'MAC' : 'LINUX'));
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
SET @myaac_database_version = 42;
|
SET @myaac_database_version = 43;
|
||||||
|
|
||||||
CREATE TABLE `myaac_account_actions`
|
CREATE TABLE `myaac_account_actions`
|
||||||
(
|
(
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
<?php defined('MYAAC') or die('Direct access not allowed!'); ?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html dir="<?php echo $locale['direction']; ?>" lang="<?php echo $locale['lang']; ?>" xml:lang="<?php echo $locale['lang']; ?>">
|
<html dir="<?php echo $locale['direction']; ?>" lang="<?php echo $locale['lang']; ?>" xml:lang="<?php echo $locale['lang']; ?>">
|
||||||
<head>
|
<head>
|
||||||
|
@@ -156,9 +156,14 @@ if ($db->hasTable('guilds')) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!$db->hasColumn('guilds', 'description')) {
|
if (!$db->hasColumn('guilds', 'description')) {
|
||||||
if (query("ALTER TABLE `guilds` ADD `description` TEXT NOT NULL;"))
|
if (query("ALTER TABLE `guilds` ADD `description` VARCHAR(5000) NOT NULL DEFAULT '';"))
|
||||||
success($locale['step_database_adding_field'] . ' guilds.description...');
|
success($locale['step_database_adding_field'] . ' guilds.description...');
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if (query("ALTER TABLE `guilds` MODIFY `description` VARCHAR(5000) NOT NULL DEFAULT '';")) {
|
||||||
|
success($locale['step_database_modifying_field'] . ' guilds.description...');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($db->hasColumn('guilds', 'logo_gfx_name')) {
|
if ($db->hasColumn('guilds', 'logo_gfx_name')) {
|
||||||
if (query("ALTER TABLE `guilds` CHANGE `logo_gfx_name` `logo_name` VARCHAR( 255 ) NOT NULL DEFAULT 'default.gif';")) {
|
if (query("ALTER TABLE `guilds` CHANGE `logo_gfx_name` `logo_name` VARCHAR( 255 ) NOT NULL DEFAULT 'default.gif';")) {
|
||||||
@@ -197,9 +202,14 @@ if ($db->hasTable('players')) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!$db->hasColumn('players', 'comment')) {
|
if (!$db->hasColumn('players', 'comment')) {
|
||||||
if (query("ALTER TABLE `players` ADD `comment` TEXT NOT NULL;"))
|
if (query("ALTER TABLE `players` ADD `comment` VARCHAR(5000) NOT NULL DEFAULT '';"))
|
||||||
success($locale['step_database_adding_field'] . ' players.comment...');
|
success($locale['step_database_adding_field'] . ' players.comment...');
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if (query("ALTER TABLE `players` MODIFY `comment` VARCHAR(5000) NOT NULL DEFAULT '';")) {
|
||||||
|
success($locale['step_database_modifying_field'] . ' players.comment...');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($db->hasColumn('players', 'rank_id')) {
|
if ($db->hasColumn('players', 'rank_id')) {
|
||||||
if (query("ALTER TABLE players MODIFY `rank_id` INT(11) NOT NULL DEFAULT 0;"))
|
if (query("ALTER TABLE players MODIFY `rank_id` INT(11) NOT NULL DEFAULT 0;"))
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "create-account-hint",
|
"name": "create-account-hint",
|
||||||
"description": "This plugin display text 'To play on Forgotten you need an account. All you have to do to create your new account is to enter an account name, password, country and your email address. Also you have to agree to the terms presented below. If you have done so, your account name will be shown on the following page and your account password will be sent to your email address along with further instructions. If you do not receive the email with your password, please check your spam filter.' on the create account page. <strong>Be careful when uninstalling this!</strong>",
|
"description": "This plugin display text 'To play on Forgotten you need an account. All you have to do to create your new account is to enter an account name, password, country and your email address. Also you have to agree to the terms presented below. If you have done so, your account name will be shown on the following page and your account password will be sent to your email address along with further instructions. If you do not receive the email with your password, please check your spam filter.' on the create account page.",
|
||||||
"version": "1.0",
|
"version": "1.0",
|
||||||
"author": "slawkens",
|
"author": "slawkens",
|
||||||
"contact": "slawkens@gmail.com",
|
"contact": "slawkens@gmail.com",
|
||||||
|
@@ -9,7 +9,4 @@
|
|||||||
*/
|
*/
|
||||||
defined('MYAAC') or die('Direct access not allowed!');
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
|
||||||
global $twig_loader;
|
$twig->display('account-create-hint/hint.html.twig');
|
||||||
$twig_loader->prependPath(BASE . 'plugins/account-create-hint');
|
|
||||||
|
|
||||||
$twig->display('hint.html.twig');
|
|
||||||
|
@@ -49,7 +49,7 @@ function warning($message, $return = false) {
|
|||||||
return message($message, 'warning', $return);
|
return message($message, 'warning', $return);
|
||||||
}
|
}
|
||||||
function note($message, $return = false) {
|
function note($message, $return = false) {
|
||||||
return info($message, $return);
|
return message($message, 'note', $return);
|
||||||
}
|
}
|
||||||
function info($message, $return = false) {
|
function info($message, $return = false) {
|
||||||
return message($message, 'info', $return);
|
return message($message, 'info', $return);
|
||||||
@@ -1057,14 +1057,14 @@ function get_browser_real_ip() {
|
|||||||
|
|
||||||
return '0';
|
return '0';
|
||||||
}
|
}
|
||||||
function setSession($key, $data) {
|
function setSession($key, $data): void {
|
||||||
$_SESSION[setting('core.session_prefix') . $key] = $data;
|
$_SESSION[setting('core.session_prefix') . $key] = $data;
|
||||||
}
|
}
|
||||||
function getSession($key) {
|
function getSession($key) {
|
||||||
$key = setting('core.session_prefix') . $key;
|
$key = setting('core.session_prefix') . $key;
|
||||||
return isset($_SESSION[$key]) ? $_SESSION[$key] : false;
|
return $_SESSION[$key] ?? false;
|
||||||
}
|
}
|
||||||
function unsetSession($key) {
|
function unsetSession($key): void {
|
||||||
unset($_SESSION[setting('core.session_prefix') . $key]);
|
unset($_SESSION[setting('core.session_prefix') . $key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1679,4 +1679,7 @@ function getAccountIdentityColumn(): string
|
|||||||
require_once SYSTEM . 'compat/base.php';
|
require_once SYSTEM . 'compat/base.php';
|
||||||
|
|
||||||
// custom functions
|
// custom functions
|
||||||
require SYSTEM . 'functions_custom.php';
|
$customFunctions = SYSTEM . 'functions_custom.php';
|
||||||
|
if (is_file($customFunctions)) {
|
||||||
|
require $customFunctions;
|
||||||
|
}
|
||||||
|
@@ -139,7 +139,7 @@ require_once SYSTEM . 'database.php';
|
|||||||
|
|
||||||
// verify myaac tables exists in database
|
// verify myaac tables exists in database
|
||||||
if(!defined('MYAAC_INSTALL') && !$db->hasTable('myaac_account_actions')) {
|
if(!defined('MYAAC_INSTALL') && !$db->hasTable('myaac_account_actions')) {
|
||||||
throw new RuntimeException('Seems that the table myaac_account_actions of MyAAC doesn\'t exist in the database. This is a fatal error. You can try to reinstall MyAAC by visiting ' . BASE_URL . 'install');
|
throw new RuntimeException('Seems that the table myaac_account_actions of MyAAC doesn\'t exist in the database. This is a fatal error. You can try to reinstall MyAAC by visiting ' . (IS_CLI ? 'http://your-ip.com/' : BASE_URL) . 'install');
|
||||||
}
|
}
|
||||||
|
|
||||||
// execute migrations
|
// execute migrations
|
||||||
|
File diff suppressed because it is too large
Load Diff
20
system/migrations/43.php
Normal file
20
system/migrations/43.php
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 2025-01-22
|
||||||
|
// change columns to VARCHAR
|
||||||
|
$up = function () use ($db) {
|
||||||
|
$db->query("UPDATE guilds set description = '' WHERE description is NULL;"); // prevent truncate error when column is NULL
|
||||||
|
$db->modifyColumn('guilds', 'description', "VARCHAR(5000) NOT NULL DEFAULT ''");
|
||||||
|
|
||||||
|
$db->query("UPDATE players set comment = '' WHERE comment is NULL;");
|
||||||
|
$db->modifyColumn('players', 'comment', "VARCHAR(5000) NOT NULL DEFAULT ''");
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
$db->modifyColumn('guilds', 'description', "TEXT NOT NULL");
|
||||||
|
$db->modifyColumn('players', 'comment', "TEXT NOT NULL");
|
||||||
|
};
|
||||||
|
|
@@ -509,7 +509,7 @@ Sent by MyAAC,<br/>
|
|||||||
'smtp_port' => [
|
'smtp_port' => [
|
||||||
'name' => 'SMTP Host',
|
'name' => 'SMTP Host',
|
||||||
'type' => 'number',
|
'type' => 'number',
|
||||||
'desc' => '25 (default) / 465 (ssl, GMail) / 587 (tls, Microsoft Outlook)',
|
'desc' => '25 (default) / 587 (tls - GMail, Microsoft Outlook)',
|
||||||
'default' => 25,
|
'default' => 25,
|
||||||
'show_if' => [
|
'show_if' => [
|
||||||
'mail_enabled', '=', 'true'
|
'mail_enabled', '=', 'true'
|
||||||
@@ -536,7 +536,8 @@ Sent by MyAAC,<br/>
|
|||||||
'smtp_pass' => [
|
'smtp_pass' => [
|
||||||
'name' => 'SMTP Password',
|
'name' => 'SMTP Password',
|
||||||
'type' => 'password',
|
'type' => 'password',
|
||||||
'desc' => 'Here your email password to authenticate with SMTP',
|
'desc' => 'Here your email password to authenticate with SMTP.' . PHP_EOL
|
||||||
|
. 'For GMail use generated App password - https://myaccount.google.com/apppasswords.',
|
||||||
'default' => '',
|
'default' => '',
|
||||||
'show_if' => [
|
'show_if' => [
|
||||||
'mail_enabled', '=', 'true'
|
'mail_enabled', '=', 'true'
|
||||||
@@ -546,7 +547,8 @@ Sent by MyAAC,<br/>
|
|||||||
'name' => 'SMTP Security',
|
'name' => 'SMTP Security',
|
||||||
'type' => 'options',
|
'type' => 'options',
|
||||||
'options' => ['None', 'SSL', 'TLS'],
|
'options' => ['None', 'SSL', 'TLS'],
|
||||||
'desc' => 'What kind of encryption to use on the SMTP connection',
|
'desc' => 'What kind of encryption to use on the SMTP connection.' . PHP_EOL
|
||||||
|
. '(Gmail, Outlook - tls).',
|
||||||
'default' => 0,
|
'default' => 0,
|
||||||
'show_if' => [
|
'show_if' => [
|
||||||
'mail_enabled', '=', 'true'
|
'mail_enabled', '=', 'true'
|
||||||
|
@@ -24,21 +24,28 @@ Please enter your account {{ account|lower }} and your password.<br/><a href="{{
|
|||||||
<td>
|
<td>
|
||||||
<div class="InnerTableContainer">
|
<div class="InnerTableContainer">
|
||||||
<table style="width:100%;" >
|
<table style="width:100%;" >
|
||||||
{{ hook('HOOK_ACCOUNT_LOGIN_BEFORE_PASSWORD') }}
|
|
||||||
|
{{ hook('HOOK_ACCOUNT_LOGIN_BEFORE_ACCOUNT') }}
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="LabelV" >
|
<td class="LabelV" >
|
||||||
<span{% if error is not null %} class="red"{% endif %}>{{ account_login_by }}:</span>
|
<span{% if error is not null %} class="red"{% endif %}>{{ account_login_by }}:</span>
|
||||||
</td>
|
</td>
|
||||||
<td style="width:100%;" ><input type="text" name="account_login" size="30" maxlength="{{ setting('core.account_login_by_email') ? '255' : '30' }}" autofocus/></td>
|
<td style="width:100%;" ><input type="text" name="account_login" size="30" maxlength="{{ setting('core.account_login_by_email') ? '255' : '30' }}" autofocus/></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
{{ hook('HOOK_ACCOUNT_LOGIN_AFTER_ACCOUNT') }}
|
{{ hook('HOOK_ACCOUNT_LOGIN_AFTER_ACCOUNT') }}
|
||||||
|
{{ hook('HOOK_ACCOUNT_LOGIN_BEFORE_PASSWORD') }}
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="LabelV" >
|
<td class="LabelV" >
|
||||||
<span{% if error is not null %} class="red"{% endif %}>Password:</span>
|
<span{% if error is not null %} class="red"{% endif %}>Password:</span>
|
||||||
</td>
|
</td>
|
||||||
<td><input type="password" name="password_login" size="30" maxlength="29" ></td>
|
<td><input type="password" name="password_login" size="30" maxlength="29" ></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
{{ hook('HOOK_ACCOUNT_LOGIN_AFTER_PASSWORD') }}
|
{{ hook('HOOK_ACCOUNT_LOGIN_AFTER_PASSWORD') }}
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="LabelV" ></td>
|
<td class="LabelV" ></td>
|
||||||
<td><input type="checkbox" id="remember_me" name="remember_me" value="true" />
|
<td><input type="checkbox" id="remember_me" name="remember_me" value="true" />
|
||||||
|
@@ -42,8 +42,9 @@ if(isset($config['boxes']))
|
|||||||
} else if ($exp[0] === 'news' && $exp[1] === 'archive') {
|
} else if ($exp[0] === 'news' && $exp[1] === 'archive') {
|
||||||
$tmp = 'news_archive';
|
$tmp = 'news_archive';
|
||||||
}
|
}
|
||||||
else
|
else if (in_array($exp[0], ['characters', 'highscores', 'guilds', 'forum'])) {
|
||||||
$tmp = $exp[0];
|
$tmp = $exp[0];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -117,6 +118,15 @@ if(isset($config['boxes']))
|
|||||||
menu[0] = {};
|
menu[0] = {};
|
||||||
var unloadhelper = false;
|
var unloadhelper = false;
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$menuInitStr = '';
|
||||||
|
foreach ($config['menu_categories'] as $item) {
|
||||||
|
if ($item['id'] !== 'shops' || setting('core.gifts_system')) {
|
||||||
|
$menuInitStr .= $item['id'] . '=' . ($item['id'] === 'news' ? '1' : '0') . '&';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
// load the menu and set the active submenu item by using the variable 'activeSubmenuItem'
|
// load the menu and set the active submenu item by using the variable 'activeSubmenuItem'
|
||||||
function LoadMenu()
|
function LoadMenu()
|
||||||
{
|
{
|
||||||
@@ -124,7 +134,7 @@ if(isset($config['boxes']))
|
|||||||
document.getElementById("ActiveSubmenuItemIcon_"+activeSubmenuItem).style.visibility = "visible";
|
document.getElementById("ActiveSubmenuItemIcon_"+activeSubmenuItem).style.visibility = "visible";
|
||||||
menus = localStorage.getItem('menus');
|
menus = localStorage.getItem('menus');
|
||||||
if(menus == null || menus.lastIndexOf("&") === -1) {
|
if(menus == null || menus.lastIndexOf("&") === -1) {
|
||||||
menus = "news=1&account=0&community=0&library=0&forum=0<?php if (setting('core.gifts_system')) echo '&shops=0'; ?>&";
|
menus = "<?= $menuInitStr ?>";
|
||||||
}
|
}
|
||||||
FillMenuArray();
|
FillMenuArray();
|
||||||
InitializeMenu();
|
InitializeMenu();
|
||||||
@@ -328,10 +338,22 @@ if(isset($config['boxes']))
|
|||||||
<?php
|
<?php
|
||||||
$menus = get_template_menus();
|
$menus = get_template_menus();
|
||||||
|
|
||||||
|
$countElements = 0;
|
||||||
|
foreach($config['menu_categories'] as $id => $cat) {
|
||||||
|
if (!isset($menus[$id]) || ($id == MENU_CATEGORY_SHOP && !setting('core.gifts_system'))) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$countElements++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
foreach($config['menu_categories'] as $id => $cat) {
|
foreach($config['menu_categories'] as $id => $cat) {
|
||||||
if(!isset($menus[$id]) || ($id == MENU_CATEGORY_SHOP && !setting('core.gifts_system'))) {
|
if(!isset($menus[$id]) || ($id == MENU_CATEGORY_SHOP && !setting('core.gifts_system'))) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$i++;
|
||||||
?>
|
?>
|
||||||
<div id='<?php echo $cat['id']; ?>' class='menuitem'>
|
<div id='<?php echo $cat['id']; ?>' class='menuitem'>
|
||||||
<span onClick="MenuItemAction('<?php echo $cat['id']; ?>')">
|
<span onClick="MenuItemAction('<?php echo $cat['id']; ?>')">
|
||||||
@@ -371,7 +393,7 @@ foreach($config['menu_categories'] as $id => $cat) {
|
|||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
if($id == MENU_CATEGORY_SHOP || (!setting('core.gifts_system') && $id == MENU_CATEGORY_SHOP - 1)) {
|
if($id == MENU_CATEGORY_SHOP || (!setting('core.gifts_system') && $i == $countElements)) {
|
||||||
?>
|
?>
|
||||||
<div id='MenuBottom' style='background-image:url(<?php echo $template_path; ?>/images/general/box-bottom.gif);'></div>
|
<div id='MenuBottom' style='background-image:url(<?php echo $template_path; ?>/images/general/box-bottom.gif);'></div>
|
||||||
<?php
|
<?php
|
||||||
|
Reference in New Issue
Block a user