mirror of
https://github.com/Sarjuuk/aowow.git
synced 2025-11-29 15:58:16 +08:00
Template/Update (Part 46 - I)
* account management rework: Base * create proper account settings page - modelviewer preferences - show ids in lists - announcement purge - public description * fix broken FKs between aowow_user_ratings and aowow_account
This commit is contained in:
168
endpoints/account/account.php
Normal file
168
endpoints/account/account.php
Normal file
@@ -0,0 +1,168 @@
|
||||
<?php
|
||||
|
||||
namespace Aowow;
|
||||
|
||||
if (!defined('AOWOW_REVISION'))
|
||||
die('illegal access');
|
||||
|
||||
|
||||
class AccountBaseResponse extends TemplateResponse
|
||||
{
|
||||
protected string $template = 'account';
|
||||
protected string $pageName = 'account';
|
||||
|
||||
protected array $scripts = [[SC_JS_FILE, 'js/account.js']];
|
||||
|
||||
// display status of executed step (forwarding back to this page)
|
||||
public ?array $generalMessage = null;
|
||||
public ?array $emailMessage = null;
|
||||
public ?array $usernameMessage = null;
|
||||
public ?array $passwordMessage = null;
|
||||
public ?array $communityMessage = null;
|
||||
public ?array $avatarMessage = null;
|
||||
|
||||
// form fields
|
||||
public int $modelrace = 0;
|
||||
public int $modelgender = 0;
|
||||
public int $idsInLists = 0;
|
||||
public string $curEmail = '';
|
||||
public string $curName = '';
|
||||
public string $renameCD = '';
|
||||
public array $description = [];
|
||||
public array $signature = [];
|
||||
public int $avMode = 0;
|
||||
public string $wowicon = '';
|
||||
public int $customicon = 0;
|
||||
public array $customicons = [];
|
||||
public bool $premium = false;
|
||||
public ?Listview $avatarManager = null;
|
||||
|
||||
public ?array $bans;
|
||||
|
||||
public function __construct($pageParam)
|
||||
{
|
||||
if (!User::isLoggedIn())
|
||||
$this->forwardToSignIn('account');
|
||||
|
||||
parent::__construct($pageParam);
|
||||
}
|
||||
|
||||
protected function generate() : void
|
||||
{
|
||||
array_unshift($this->title, Lang::account('settings'));
|
||||
|
||||
$user = DB::Aowow()->selectRow('SELECT `debug`, `email`, `description`, `avatar`, `wowicon` FROM ?_account WHERE `id` = ?d', User::$id);
|
||||
|
||||
Lang::sort('game', 'ra');
|
||||
|
||||
parent::generate();
|
||||
|
||||
|
||||
/*************/
|
||||
/* Ban Popup */
|
||||
/*************/
|
||||
|
||||
$b = DB::Aowow()->select(
|
||||
'SELECT ab.`end` AS "0", ab.`reason` AS "1", a.`username` AS "2"
|
||||
FROM ?_account_banned ab
|
||||
LEFT JOIN ?_account a ON a.`id` = ab.`staffId`
|
||||
WHERE ab.`userId` = ?d AND ab.`typeMask` & ?d AND (ab.`end` = 0 OR ab.`end` > UNIX_TIMESTAMP())',
|
||||
User::$id, ACC_BAN_TEMP | ACC_BAN_PERM
|
||||
);
|
||||
|
||||
$this->bans = $b ?: null;
|
||||
|
||||
|
||||
/*******************/
|
||||
/* Status Messages */
|
||||
/*******************/
|
||||
|
||||
if (isset($_SESSION['msg']))
|
||||
{
|
||||
[$var, $status, $msg] = $_SESSION['msg'];
|
||||
if (property_exists($this, $var.'Message'))
|
||||
$this->{$var.'Message'} = [$status, $msg];
|
||||
else
|
||||
trigger_error('AccountBaseResponse::generate - unknown var in $_SESSION msg: '.$var, E_USER_WARNING);
|
||||
|
||||
unset($_SESSION['msg']);
|
||||
}
|
||||
|
||||
|
||||
/*************/
|
||||
/* Form Data */
|
||||
/*************/
|
||||
|
||||
/* GENERAL */
|
||||
|
||||
// Modelviewer
|
||||
if ($_ = DB::Aowow()->selectCell('SELECT `data` FROM ?_account_cookies WHERE `name` = ? AND `userId` = ?d', 'default_3dmodel', User::$id))
|
||||
[$this->modelrace, $this->modelgender] = explode(',', $_);
|
||||
|
||||
// Lists
|
||||
$this->idsInLists = $user['debug'] ? 1 : 0;
|
||||
|
||||
/* PERSONAL */
|
||||
|
||||
// Email address
|
||||
$this->curEmail = $user['email'] ?? '';
|
||||
|
||||
// Username
|
||||
$this->curName = User::$username;
|
||||
|
||||
// todo localize date format; store time
|
||||
// $this->renameCD = date('F j, o', time() + 7 * DAY);
|
||||
|
||||
/* COMMUNITY */
|
||||
|
||||
// Public Description
|
||||
$this->description = ['body' => $user['description']];
|
||||
|
||||
// Forum Signature
|
||||
// $this->signature = ['body' => $user['signature']];
|
||||
|
||||
// Avatar
|
||||
$this->wowicon = $user['wowicon'];
|
||||
$this->avMode = $user['avatar'];
|
||||
|
||||
// status [reviewing, ok, rejected]? (only 2: rejected processed in js)
|
||||
if (User::isPremium() && ($cuAvatars = DB::Aowow()->select('SELECT `id`, `name`, `current`, `size`, `status`, `when` FROM ?_account_avatars WHERE `userId` = ?d AND `status` > 0', User::$id)))
|
||||
{
|
||||
array_walk($cuAvatars, function (&$x) {
|
||||
$x['when'] *= 1000; // uploaded timestamp expected as msec for some reason
|
||||
$x['caption'] = $x['name']; // only used for getVisibleText, duplicates name?
|
||||
$x['type'] = 1; // always 1 ?, Dialog-popup doesn't work without it
|
||||
});
|
||||
|
||||
foreach ($cuAvatars as $a)
|
||||
if ($a['status'] != 2)
|
||||
$this->customicons[$a['id']] = $a['name'];
|
||||
|
||||
// TODO - replace with array_find in PHP 8.4
|
||||
if ($x = array_filter($cuAvatars, fn($x) => $x['current'] > 0 ))
|
||||
$this->customicon = array_pop($x)['id'];
|
||||
}
|
||||
|
||||
/* PREMIUM */
|
||||
|
||||
$this->premium = User::isPremium();
|
||||
|
||||
if (!$this->premium)
|
||||
return;
|
||||
|
||||
// Avatar Manager
|
||||
$this->avatarManager = new Listview([
|
||||
'template' => 'avatar',
|
||||
'id' => 'avatar',
|
||||
'name' => '$LANG.tab_avatars',
|
||||
'parent' => 'avatar-manage',
|
||||
'hideNav' => 1 | 2, // top | bottom
|
||||
'data' => $cuAvatars ?? []
|
||||
]);
|
||||
|
||||
// Premium Border Selector
|
||||
// ???
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -62,7 +62,7 @@ class AccountSigninResponse extends TemplateResponse
|
||||
$this->forward($this->getNext(true));
|
||||
|
||||
$this->inputbox = ['inputbox-form-signin', array(
|
||||
'head' => Lang::account('doSignIn'),
|
||||
'head' => Lang::account('inputbox', 'head', 'signin'),
|
||||
'action' => '?account=signin&next='.$this->getNext(),
|
||||
'error' => $message,
|
||||
'username' => $username,
|
||||
@@ -90,7 +90,7 @@ class AccountSigninResponse extends TemplateResponse
|
||||
// AUTH_BANNED => Lang::account('accBanned'); // ToDo: should this return an error? the actual account functionality should be blocked elsewhere
|
||||
AUTH_WRONGUSER => Lang::account('userNotFound'),
|
||||
AUTH_WRONGPASS => Lang::account('wrongPass'),
|
||||
AUTH_IPBANNED => Lang::account('loginExceeded', [Util::formatTime(Cfg::get('ACC_FAILED_AUTH_BLOCK') * 1000)]),
|
||||
AUTH_IPBANNED => Lang::account('inputbox', 'error', 'loginExceeded', [Util::formatTime(Cfg::get('ACC_FAILED_AUTH_BLOCK') * 1000)]),
|
||||
AUTH_INTERNAL_ERR => Lang::main('intError'),
|
||||
default => Lang::main('intError')
|
||||
};
|
||||
|
||||
48
endpoints/account/update-community-settings.php
Normal file
48
endpoints/account/update-community-settings.php
Normal file
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace Aowow;
|
||||
|
||||
if (!defined('AOWOW_REVISION'))
|
||||
die('illegal access');
|
||||
|
||||
|
||||
/*
|
||||
* accessed via account settings form submit
|
||||
* write status to session and redirect to account settings
|
||||
*/
|
||||
|
||||
class AccountUpdatecommunitysettingsResponse extends TextResponse
|
||||
{
|
||||
protected ?string $redirectTo = '?account#community';
|
||||
protected bool $requiresLogin = true;
|
||||
|
||||
protected array $expectedPOST = array(
|
||||
'desc' => ['filter' => FILTER_CALLBACK, 'options' => [self::class, 'checkTextBlob']]
|
||||
);
|
||||
|
||||
private bool $success = false;
|
||||
|
||||
protected function generate() : void
|
||||
{
|
||||
if (User::isBanned())
|
||||
return;
|
||||
|
||||
if ($message = $this->updateSettings())
|
||||
$_SESSION['msg'] = ['community', $this->success, $message];
|
||||
}
|
||||
|
||||
protected function updateSettings()
|
||||
{
|
||||
if (is_null($this->_post['desc'])) // assertPOST tests for empty string which is valid here
|
||||
return Lang::main('genericError');
|
||||
|
||||
// description - 0 modified rows is still success
|
||||
if (!is_int(DB::Aowow()->query('UPDATE ?_account SET `description` = ? WHERE `id` = ?d', $this->_post['desc'], User::$id)))
|
||||
return Lang::main('genericError');
|
||||
|
||||
$this->success = true;
|
||||
return Lang::account('updateMessage', 'community');
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
60
endpoints/account/update-general-settings.php
Normal file
60
endpoints/account/update-general-settings.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace Aowow;
|
||||
|
||||
if (!defined('AOWOW_REVISION'))
|
||||
die('illegal access');
|
||||
|
||||
|
||||
/*
|
||||
* accessed via account settings form submit
|
||||
* write status to session and redirect to account settings
|
||||
*/
|
||||
|
||||
class AccountUpdategeneralsettingsResponse extends TextResponse
|
||||
{
|
||||
protected ?string $redirectTo = '?account#general';
|
||||
protected bool $requiresLogin = true;
|
||||
|
||||
protected array $expectedPOST = array(
|
||||
'modelrace' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['default' => 0, 'min_range' => 1, 'max_range' => 11]],
|
||||
'modelgender' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['default' => 0, 'min_range' => 1, 'max_range' => 2] ],
|
||||
'idsInLists' => ['filter' => FILTER_CALLBACK, 'options' => [self::class, 'checkCheckbox'] ]
|
||||
);
|
||||
|
||||
private bool $success = false;
|
||||
|
||||
protected function generate() : void
|
||||
{
|
||||
if (User::isBanned())
|
||||
return;
|
||||
|
||||
if ($message = $this->updateGeneral())
|
||||
$_SESSION['msg'] = ['general', $this->success, $message];
|
||||
}
|
||||
|
||||
private function updateGeneral() : string
|
||||
{
|
||||
if (!$this->assertPOST('modelrace', 'modelgender'))
|
||||
return Lang::main('genericError');
|
||||
|
||||
if ($this->_post['modelrace'] && !ChrRace::tryFrom($this->_post['modelrace']))
|
||||
return Lang::main('genericError');
|
||||
|
||||
// js handles this as cookie, so saved as cookie; Q - also save in ?_account table?
|
||||
if (!DB::Aowow()->query('REPLACE INTO ?_account_cookies (`userId`, `name`, `data`) VALUES (?d, ?, ?)', User::$id, 'default_3dmodel', $this->_post['modelrace']. ',' . $this->_post['modelgender']))
|
||||
return Lang::main('genericError');
|
||||
|
||||
if (!setcookie('default_3dmodel', $this->_post['modelrace']. ',' . $this->_post['modelgender'], 0, '/'))
|
||||
return Lang::main('intError');
|
||||
|
||||
// int > number of edited rows > no changes is still success
|
||||
if (!is_int(DB::Aowow()->query('UPDATE ?_account SET `debug` = ?d WHERE `id` = ?d', $this->_post['idsInLists'] ? 1 : 0, User::$id)))
|
||||
return Lang::main('intError');
|
||||
|
||||
$this->success = true;
|
||||
return Lang::account('updateMessage', 'general');
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -19,7 +19,7 @@ trait TrRecoveryHelper
|
||||
|
||||
// check if already processing
|
||||
if ($_ = DB::Aowow()->selectCell('SELECT `statusTimer` - UNIX_TIMESTAMP() FROM ?_account WHERE `email` = ? AND `status` > ?d AND `statusTimer` > UNIX_TIMESTAMP()', $email, ACC_STATUS_NEW))
|
||||
return sprintf(Lang::account('isRecovering'), Util::formatTime($_ * 1000));
|
||||
return Lang::account('inputbox', 'error', 'isRecovering', [Util::formatTime($_ * 1000)]);
|
||||
|
||||
// create new token and write to db
|
||||
$token = Util::createHash();
|
||||
@@ -28,7 +28,7 @@ trait TrRecoveryHelper
|
||||
|
||||
// send recovery mail
|
||||
if (!Util::sendMail($email, $mailTemplate, [$token], Cfg::get('ACC_RECOVERY_DECAY')))
|
||||
return sprintf(Lang::main('intError2'), 'send mail');
|
||||
return Lang::main('intError2', ['send mail']);
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
@@ -62,10 +62,14 @@ define('DB_AUTH', 2);
|
||||
define('DB_CHARACTERS', 3);
|
||||
|
||||
// Account Status
|
||||
define('ACC_STATUS_OK', 0); // nothing special
|
||||
define('ACC_STATUS_NONE', 0); // nothing special
|
||||
define('ACC_STATUS_NEW', 1); // just created, awaiting confirmation
|
||||
define('ACC_STATUS_RECOVER_USER', 2); // currently recovering username
|
||||
define('ACC_STATUS_RECOVER_PASS', 3); // currently recovering password
|
||||
define('ACC_STATUS_CHANGE_EMAIL', 4); // currently changing contact email
|
||||
define('ACC_STATUS_CHANGE_PASS', 5); // currently changing password
|
||||
define('ACC_STATUS_CHANGE_USERNAME', 6); // currently changing username
|
||||
define('ACC_STATUS_DELETED', 7); // is deleted - only a stub remains
|
||||
|
||||
// Session Status
|
||||
define('SESSION_ACTIVE', 1);
|
||||
@@ -84,6 +88,12 @@ define('ACC_BAN_VIDEO', 0x0040); // cannot suggest vi
|
||||
define('ACC_BAN_GUIDE', 0x0080); // cannot write a guide
|
||||
define('ACC_BAN_FORUM', 0x0100); // cannot post on forums [not used here]
|
||||
|
||||
define('IP_BAN_TYPE_LOGIN_ATTEMPT', 0);
|
||||
define('IP_BAN_TYPE_REGISTRATION_ATTEMPT', 1);
|
||||
define('IP_BAN_TYPE_EMAIL_RECOVERY', 2);
|
||||
define('IP_BAN_TYPE_PASSWORD_RECOVERY', 3);
|
||||
define('IP_BAN_TYPE_USERNAME_RECOVERY', 4);
|
||||
|
||||
// Site Reputation/Privileges
|
||||
define('SITEREP_ACTION_REGISTER', 1); // Registered account
|
||||
define('SITEREP_ACTION_DAILYVISIT', 2); // Daily visit
|
||||
|
||||
@@ -48,7 +48,7 @@ class User
|
||||
return false;
|
||||
|
||||
// check IP bans
|
||||
if ($ipBan = DB::Aowow()->selectRow('SELECT `count`, IF(`unbanDate` > UNIX_TIMESTAMP(), 1, 0) AS "active" FROM ?_account_bannedips WHERE `ip` = ? AND `type` = 0', self::$ip))
|
||||
if ($ipBan = DB::Aowow()->selectRow('SELECT `count`, IF(`unbanDate` > UNIX_TIMESTAMP(), 1, 0) AS "active" FROM ?_account_bannedips WHERE `ip` = ? AND `type` = ?d', self::$ip, IP_BAN_TYPE_LOGIN_ATTEMPT))
|
||||
{
|
||||
if ($ipBan['count'] > Cfg::get('ACC_FAILED_AUTH_COUNT') && $ipBan['active'])
|
||||
return false;
|
||||
@@ -62,7 +62,7 @@ class User
|
||||
|
||||
$session = DB::Aowow()->selectRow('SELECT `userId`, `expires` FROM ?_account_sessions WHERE `status` = ?d AND `sessionId` = ?', SESSION_ACTIVE, session_id());
|
||||
$userData = DB::Aowow()->selectRow(
|
||||
'SELECT a.`id`, a.`passHash`, a.`username`, a.`locale`, a.`userGroups`, a.`userPerms`, BIT_OR(ab.`typeMask`) AS "bans", IFNULL(SUM(r.`amount`), 0) AS "reputation", a.`dailyVotes`, a.`excludeGroups`, a.`status`, a.`statusTimer`, a.`email`
|
||||
'SELECT a.`id`, a.`passHash`, a.`username`, a.`locale`, a.`userGroups`, a.`userPerms`, BIT_OR(ab.`typeMask`) AS "bans", IFNULL(SUM(r.`amount`), 0) AS "reputation", a.`dailyVotes`, a.`excludeGroups`, a.`status`, a.`statusTimer`, a.`email`, a.`debug`
|
||||
FROM ?_account a
|
||||
LEFT JOIN ?_account_banned ab ON a.`id` = ab.`userId` AND ab.`end` > UNIX_TIMESTAMP()
|
||||
LEFT JOIN ?_account_reputation r ON a.`id` = r.`userId`
|
||||
@@ -97,10 +97,10 @@ class User
|
||||
self::$preferedLoc = $loc;
|
||||
|
||||
// reset expired account statuses
|
||||
if ($userData['statusTimer'] < time() && $userData['status'] > ACC_STATUS_NEW)
|
||||
if ($userData['statusTimer'] && $userData['statusTimer'] < time() && $userData['status'] != ACC_STATUS_NEW)
|
||||
{
|
||||
DB::Aowow()->query('UPDATE ?_account SET `status` = ?d, `statusTimer` = 0, `token` = "", `updateValue` = "" WHERE `id` = ?d', ACC_STATUS_OK, User::$id);
|
||||
$userData['status'] = ACC_STATUS_OK;
|
||||
DB::Aowow()->query('UPDATE ?_account SET `status` = ?d, `statusTimer` = 0, `token` = "", `updateValue` = "" WHERE `id` = ?d', ACC_STATUS_NONE, User::$id);
|
||||
$userData['status'] = ACC_STATUS_NONE;
|
||||
}
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ class User
|
||||
self::$dailyVotes = $userData['dailyVotes'];
|
||||
self::$excludeGroups = $userData['excludeGroups'];
|
||||
self::$status = $userData['status'];
|
||||
// self::$debug = $userData['debug']; // TBD
|
||||
self::$debug = $userData['debug'];
|
||||
self::$email = $userData['email'];
|
||||
|
||||
if (Cfg::get('PROFILER_ENABLE'))
|
||||
@@ -251,9 +251,9 @@ class User
|
||||
return AUTH_INTERNAL_ERR;
|
||||
|
||||
// handle login try limitation
|
||||
$ipBan = DB::Aowow()->selectRow('SELECT `ip`, `count`, IF(`unbanDate` > UNIX_TIMESTAMP(), 1, 0) AS "active" FROM ?_account_bannedips WHERE `type` = 0 AND `ip` = ?', self::$ip);
|
||||
$ipBan = DB::Aowow()->selectRow('SELECT `ip`, `count`, IF(`unbanDate` > UNIX_TIMESTAMP(), 1, 0) AS "active" FROM ?_account_bannedips WHERE `type` = ?d AND `ip` = ?', IP_BAN_TYPE_LOGIN_ATTEMPT, self::$ip);
|
||||
if (!$ipBan || !$ipBan['active']) // no entry exists or time expired; set count to 1
|
||||
DB::Aowow()->query('REPLACE INTO ?_account_bannedips (`ip`, `type`, `count`, `unbanDate`) VALUES (?, 0, 1, UNIX_TIMESTAMP() + ?d)', self::$ip, Cfg::get('ACC_FAILED_AUTH_BLOCK'));
|
||||
DB::Aowow()->query('REPLACE INTO ?_account_bannedips (`ip`, `type`, `count`, `unbanDate`) VALUES (?, ?d, 1, UNIX_TIMESTAMP() + ?d)', self::$ip, IP_BAN_TYPE_LOGIN_ATTEMPT, Cfg::get('ACC_FAILED_AUTH_BLOCK'));
|
||||
else // entry already exists; increment count
|
||||
DB::Aowow()->query('UPDATE ?_account_bannedips SET `count` = `count` + 1, `unbanDate` = UNIX_TIMESTAMP() + ?d WHERE `ip` = ?', Cfg::get('ACC_FAILED_AUTH_BLOCK'), self::$ip);
|
||||
|
||||
@@ -279,7 +279,7 @@ class User
|
||||
return AUTH_WRONGPASS;
|
||||
|
||||
// successfull auth; clear bans for this IP
|
||||
DB::Aowow()->query('DELETE FROM ?_account_bannedips WHERE `type` = 0 AND `ip` = ?', self::$ip);
|
||||
DB::Aowow()->query('DELETE FROM ?_account_bannedips WHERE `type` = ?d AND `ip` = ?', IP_BAN_TYPE_LOGIN_ATTEMPT, self::$ip);
|
||||
|
||||
if ($query['bans'] & (ACC_BAN_PERM | ACC_BAN_TEMP))
|
||||
return AUTH_BANNED;
|
||||
@@ -362,7 +362,7 @@ class User
|
||||
$name,
|
||||
$_SERVER["REMOTE_ADDR"] ?? '',
|
||||
self::$preferedLoc->value,
|
||||
ACC_STATUS_OK,
|
||||
ACC_STATUS_NONE,
|
||||
$userGroup >= U_GROUP_NONE ? $userGroup : U_GROUP_NONE
|
||||
);
|
||||
|
||||
@@ -497,7 +497,7 @@ class User
|
||||
|
||||
public static function isRecovering() : bool
|
||||
{
|
||||
return self::$status == ACC_STATUS_RECOVER_USER || self::$status == ACC_STATUS_RECOVER_PASS;
|
||||
return self::$status != ACC_STATUS_NONE && self::$status != ACC_STATUS_NEW;
|
||||
}
|
||||
|
||||
|
||||
@@ -565,21 +565,13 @@ class User
|
||||
$gUser['characters'] = self::getCharacters();
|
||||
$gUser['excludegroups'] = self::$excludeGroups;
|
||||
|
||||
if (Cfg::get('DEBUG') && User::isInGroup(U_GROUP_DEV | U_GROUP_ADMIN | U_GROUP_TESTER))
|
||||
if (self::$debug)
|
||||
$gUser['debug'] = true; // csv id-list output option on listviews
|
||||
|
||||
if (self::getPremiumBorder())
|
||||
$gUser['settings'] = ['premiumborder' => 1];
|
||||
else
|
||||
$gUser['settings'] = (new \StdClass); // existence is checked in Profiler.js before g_user.excludegroups is applied
|
||||
|
||||
if (self::isPremium())
|
||||
$gUser['premium'] = 1;
|
||||
|
||||
if (self::getPremiumBorder())
|
||||
$gUser['settings'] = ['premiumborder' => 1];
|
||||
else
|
||||
$gUser['settings'] = (new \StdClass); // existence is checked in Profiler.js before g_user.excludegroups is applied
|
||||
$gUser['settings'] = (new \StdClass); // existence is checked in Profiler.js before g_user.excludegroups is applied; should this contain - "defaultModel":{"gender":2,"race":6} ?
|
||||
|
||||
if (self::isPremium())
|
||||
$gUser['premium'] = 1;
|
||||
|
||||
@@ -1212,12 +1212,15 @@ abstract class Util
|
||||
|
||||
$body = Util::defStatic($body);
|
||||
|
||||
if ($expiration)
|
||||
{
|
||||
$vars += array_fill(0, 9, null); // vsprintf requires all unused indizes to also be set...
|
||||
$vars[9] = Util::formatTime($expiration * 1000);
|
||||
}
|
||||
|
||||
if ($vars)
|
||||
$body = vsprintf($body, $vars);
|
||||
|
||||
if ($expiration)
|
||||
$body .= "\n\n".Lang::account('tokenExpires', [Util::formatTime($expiration * 1000)])."\n";
|
||||
|
||||
$subject = Cfg::get('NAME_SHORT').Lang::main('colon') . $subject;
|
||||
$header = 'From: ' . Cfg::get('CONTACT_EMAIL') . "\n" .
|
||||
'Reply-To: ' . Cfg::get('CONTACT_EMAIL') . "\n" .
|
||||
@@ -1225,7 +1228,7 @@ abstract class Util
|
||||
|
||||
if (Cfg::get('DEBUG') >= LOG_LEVEL_INFO)
|
||||
{
|
||||
Util::addNote("Redirected from Util::sendMail:\n\nTo: " . $email . "\n\nSubject: " . $subject . "\n\n" . $body, U_GROUP_DEV | U_GROUP_ADMIN, LOG_LEVEL_INFO);
|
||||
Util::addNote("Redirected from Util::sendMail:\n\nTo: " . $email . "\n\nSubject: " . $subject . "\n\n" . $body, U_GROUP_NONE, LOG_LEVEL_INFO);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ $lang = array(
|
||||
'numSQL' => "Anzahl an SQL-Queries",
|
||||
'timeSQL' => "Zeit für SQL-Queries",
|
||||
'noJScript' => '<b>Diese Seite macht ausgiebigen Gebrauch von JavaScript.</b><br />Bitte <a href="https://www.google.com/support/adsense/bin/answer.py?answer=12654" target="_blank">aktiviert JavaScript</a> in Eurem Browser.',
|
||||
'userProfiles' => "Deine Charaktere",
|
||||
// 'userProfiles' => "Deine Charaktere",
|
||||
'pageNotFound' => "Dies %s existiert nicht.",
|
||||
'gender' => "Geschlecht",
|
||||
'sex' => [null, "Mann", "Frau"],
|
||||
@@ -40,12 +40,13 @@ $lang = array(
|
||||
'side' => "Seite: ",
|
||||
'related' => "Weiterführende Informationen",
|
||||
'contribute' => "Beitragen",
|
||||
// 'replyingTo' => "Antwort zu einem Kommentar von",
|
||||
// 'replyingTo' => "Antwort zu einem Kommentar von",
|
||||
'submit' => "Absenden",
|
||||
'save' => 'Speichern',
|
||||
'cancel' => "Abbrechen",
|
||||
'rewards' => "Belohnungen",
|
||||
'gains' => "Belohnungen",
|
||||
'login' => "Login",
|
||||
// 'login' => "Login",
|
||||
'forum' => "Forum",
|
||||
'siteRep' => "Ruf: ",
|
||||
'yourRepHistory'=> "Dein Ruf-Verlauf",
|
||||
@@ -132,6 +133,7 @@ $lang = array(
|
||||
'colon' => ': ',
|
||||
'dateFmtShort' => "d.m.Y",
|
||||
'dateFmtLong' => "d.m.Y \u\m H:i",
|
||||
'dateFmtUntil' => "j. F Y",
|
||||
'timeAgo' => 'vor %s',
|
||||
'nfSeparators' => ['.', ','],
|
||||
|
||||
@@ -900,7 +902,6 @@ $lang = array(
|
||||
"Screenshot-Verwalter", "Video-Verwalter", "API-Partner", "Ausstehend"
|
||||
),
|
||||
// signIn
|
||||
'doSignIn' => "Mit Eurem Konto anmelden",
|
||||
'signIn' => "Anmelden",
|
||||
'user' => "Benutzername",
|
||||
'pass' => "Kennwort",
|
||||
@@ -909,25 +910,22 @@ $lang = array(
|
||||
'forgotUser' => "Benutzername",
|
||||
'forgotPass' => "Kennwort",
|
||||
'accCreate' => 'Noch kein Konto? <a href="?account=signup">Jetzt eins erstellen!</a>',
|
||||
'resendMail' => "Bestätigungsmail erneut senden",
|
||||
'resendHint' => "Wenn Sie sich registriert haben, aber keine Bestätigungs-E-Mail erhalten haben, geben Sie Ihre E-Mail-Adresse unten ein und senden Sie das Formular ab. (Bitte überprüfen Sie Ihre Spam- oder Papierkorb-Ordner, um sicherzustellen, dass die E-Mail nicht versehentlich an der falschen Stelle abgelegt wurde!)",
|
||||
|
||||
// recovery
|
||||
'recoverUser' => "Benutzernamenanfrage",
|
||||
'recoverPass' => "Kennwort zurücksetzen: Schritt %s von 2",
|
||||
'newPass' => "Neues Kennwort",
|
||||
'tokenExpires' => "Das Token wird in %s verfallen.",
|
||||
'newPass' => "Neues Kennwort:",
|
||||
'confNewPass' => "Neues Kennwort bestätigen:",
|
||||
'passResetHint' => 'Wenn ihr euer Kennwort nicht mehr wisst, könnt ihr es auf <a href="?account=forgot-password">dieser Seite zurücksetzen</a>.',
|
||||
// 'tokenExpires' => "Das Token wird in %s verfallen.",
|
||||
|
||||
// creation
|
||||
'register' => "Registrierung: Schritt %s von 2",
|
||||
'passConfirm' => "Kennwort bestätigen",
|
||||
'passConfirm' => "Kennwort bestätigen:",
|
||||
|
||||
// dashboard
|
||||
'ipAddress' => "IP-Adresse: ",
|
||||
'lastIP' => "Letzte bekannte IP: ",
|
||||
// 'myAccount' => "Mein Account",
|
||||
// 'editAccount' => "Benutze die folgenden Formulare um deine Account-Informationen zu aktualisieren",
|
||||
// 'viewPubDesc' => 'Die Beschreibung in deinem <a href="?user=%s">öffentlichen Profil</a> ansehen',
|
||||
// 'myAccount' => "Mein Account",
|
||||
// 'editAccount' => "Benutze die folgenden Formulare um deine Account-Informationen zu aktualisieren",
|
||||
// 'viewPubDesc' => 'Die Beschreibung in deinem <a href="?user=%s">öffentlichen Profil</a> ansehen',
|
||||
|
||||
// bans
|
||||
'accBanned' => "Dieses Konto wurde geschlossen",
|
||||
@@ -939,25 +937,106 @@ $lang = array(
|
||||
|
||||
// form-text
|
||||
'emailInvalid' => "Diese E-Mail-Adresse ist ungültig.", // message_emailnotvalid
|
||||
'emailNotFound' => "Die E-Mail-Adresse, die Ihr eingegeben habt, ist mit keinem Konto verbunden.<br><br>Falls Ihr die E-Mail-Adresse vergessen habt, mit der Ihr Euer Konto erstellt habt, kontaktiert Ihr bitte CFG_CONTACT_EMAIL für Hilfestellung.",
|
||||
'createAccSent' => "Eine Nachricht wurde soeben an <b>%s</b> versandt. Folgt den Anweisungen um euer Konto zu erstellen.",
|
||||
'recovUserSent' => "Eine Nachricht wurde soeben an <b>%s</b> versandt. Folgt den Anweisungen um euren Benutzernamen zu erhalten.",
|
||||
'recovPassSent' => "Eine Nachricht wurde soeben an <b>%s</b> versandt. Folgt den Anweisungen um euer Kennwort zurückzusetzen.",
|
||||
'accActivated' => 'Euer Konto wurde soeben aktiviert.<br>Ihr könnt euch nun <a href="?account=signin&token=%s">anmelden</a>',
|
||||
'userNotFound' => "Ein Konto mit diesem Namen existiert nicht.",
|
||||
'wrongPass' => "Dieses Kennwort ist ungültig.",
|
||||
// 'accInactive' => "Dieses Konto wurde bisher nicht aktiviert.",
|
||||
'loginExceeded' => "Die maximale Anzahl an Anmelde-Versuchen von dieser IP wurde überschritten. Bitte versucht es in %s erneut.",
|
||||
'signupExceeded'=> "Die maximale Anzahl an Regustrierungen von dieser IP wurde überschritten. Bitte versucht es in %s erneut.",
|
||||
// 'accInactive' => "Dieses Konto wurde bisher nicht aktiviert.",
|
||||
'errNameLength' => "Euer Benutzername muss mindestens 4 Zeichen lang sein.", // message_usernamemin
|
||||
'errNameChars' => "Euer Benutzername kann nur aus Buchstaben und Zahlen bestehen.", // message_usernamenotvalid
|
||||
'errPassLength' => "Euer Kennwort muss mindestens 6 Zeichen lang sein.", // message_passwordmin
|
||||
'passMismatch' => "Die eingegebenen Kennworte stimmen nicht überein.",
|
||||
'nameInUse' => "Es existiert bereits ein Konto mit diesem Namen.",
|
||||
'mailInUse' => "Diese E-Mail-Adresse ist bereits mit einem Konto verbunden.",
|
||||
'isRecovering' => "Dieses Konto wird bereits wiederhergestellt. Folgt den Anweisungen in der Nachricht oder wartet %s bis das Token verfällt.",
|
||||
'passCheckFail' => "Die Kennwörter stimmen nicht überein.", // message_passwordsdonotmatch
|
||||
'newPassDiff' => "Euer neues Kennwort muss sich von eurem alten Kennwort unterscheiden." // message_newpassdifferent
|
||||
'newPassDiff' => "Euer neues Kennwort muss sich von eurem alten Kennwort unterscheiden.", // message_newpassdifferent
|
||||
'newMailDiff' => "Eure neue E-Mail-Adresse muss sich von eurer alten E-Mail-Adresse unterscheiden.", // message_newemaildifferent
|
||||
|
||||
// settings
|
||||
'settings' => "Kontoeinstellungen",
|
||||
'settingsNote' => "Du kannst einfach die unten stehenden Formulare ausfüllen, um deine Kontodaten zu aktualisieren.",
|
||||
'tabGeneral' => "Allgemein",
|
||||
'tabPersonal' => "Persönliches",
|
||||
'tabCommunity' => "Community",
|
||||
'tabPremium' => "Premium",
|
||||
'preferences' => "Voreinstellungen",
|
||||
'modelviewer' => "Modellviewer",
|
||||
'mvNote' => "Vorgegebenes Charaktermodell:",
|
||||
'lists' => "Listen",
|
||||
'listsNote' => "Zeigt IDs in unterstützten Listen",
|
||||
'announcements' => "Bekanntmachungen",
|
||||
'annNote' => "Entfernt die Daten von Bekanntmachungen, die du geschlossen hast, damit sie wieder sichtbar werden.",
|
||||
'purge' => "Löschen",
|
||||
'curPass' => "Derzeitiges Kennwort:",
|
||||
'globalLogout' => "Von allen Browsern/Geräten abmelden",
|
||||
'curEmail' => "Momentane E-Mail-Adresse:",
|
||||
'newEmail' => "Neue E-Mail-Adresse:",
|
||||
'userPage' => "Benutzerseite",
|
||||
'publicDesc' => "Öffentliche Beschreibung",
|
||||
'publicDescNote'=> 'Erzähl uns etwas über dich und deine WoW-Charaktere. Alles, was du hier eingibst, erscheint auf deiner <a href="?user=%s">Benutzerseite</a>.',
|
||||
'forums' => "Foren",
|
||||
'signature' => "Signatur",
|
||||
'signatureNote' => "Deine Signatur erscheint unter all deinen Forenbeiträgen.",
|
||||
'usernameNote' => "Nutzernamen können nur einmal alle %s geändert werden und müssen 4-16 Zeichen lang sein. Sonderzeichen sind nicht erlaubt.",
|
||||
'curName' => "Aktueller Nutzername:",
|
||||
'newName' => "Neuer Nutzername:",
|
||||
'accDelete' => "Konto löschen",
|
||||
'accDeleteNote' => 'Wenn du dein Konto und alle persönlichen Daten vollständig löschen möchtest, dann geh zu unserer <a href="?account=delete" style="color:inherit; text-decoration:underline">Kontolöschung</a>.',
|
||||
'avatar' => "Avatar",
|
||||
'avatarNote' => "Dein Avatar wird neben all deinen Forenbeiträgen angezeigt.",
|
||||
'avWowIcon' => "World of Warcraft-Icon",
|
||||
'avWowIconNote' => '<span class="q0">z.B. INV_Axe_54</span><br />Tipp: Um den Namen eines Symbols herauszufinden, doppelklickt einfach auf das große Symbol, während ihr auf einer <a href="?item=22632" target="_blank">Gegenstands</a>- oder <a href="?spell=29516" target="_blank">Zauber</a>seite seid. Kopiert den Text anschließend und fügt ihn oben ein.',
|
||||
'avIconName' => "Symbolname:",
|
||||
'none' => "Keins",
|
||||
'preview' => "Vorschau",
|
||||
'custom' => "Benutzerdefiniert",
|
||||
'premiumStatus' => "Premium Status",
|
||||
'status' => "Status",
|
||||
'active' => "Activ",
|
||||
'inactive' => "Inaktiv",
|
||||
'activeCD' => "Ihr müsst bis zum %s warten um euren Nutzernamen erneut zu ändern.",
|
||||
'updateMessage' => array(
|
||||
'general' => "Deine Einstellungen wurden aktualisiert.",
|
||||
'community' => "Eure öffentliche Beschreibung und Forensignatur wurden erfolgreich aktualisiert.",
|
||||
'personal' => "Eine Bestätigungsnachricht wurde an %s versandt.",
|
||||
'username' => 'Nutzername von %1$s zu %2$s geändert.',
|
||||
'avNotFound' => "Symbol nicht gefunden.",
|
||||
'avSuccess' => "Euer Avatar wurde erfolgreich aktualisiert.",
|
||||
'avNoChange' => "Es wurden keine Änderungen durchgeführt.",
|
||||
'av1stUser' => "Glückwunsch! Ihr habt eine einzigartige Auswahl getroffen! /jubeln",
|
||||
'avNthUser' => "Zur Eurer Information, Euer Symbol wird bereits von %d anderen Benutzer(n) benutzt."
|
||||
),
|
||||
'inputbox' => array(
|
||||
'head' => array(
|
||||
'success' => "Erfolg",
|
||||
'error' => "Hoppla!",
|
||||
'register' => "Registrierung: Schritt %s von 2",
|
||||
'recoverUser' => "Benutzernamenanfrage",
|
||||
'recoverPass' => "Kennwort zurücksetzen: Schritt %s von 2",
|
||||
'resendMail' => "Bestätigungsmail erneut senden",
|
||||
'signin' => "Mit Eurem Konto anmelden"
|
||||
),
|
||||
'message' => array(
|
||||
'accActivated' => 'Euer Konto wurde soeben aktiviert.<br />Ihr könnt euch nun <a href="?account=signin&key=%s">anmelden</a>',
|
||||
'resendMail' => "Wenn Sie sich registriert haben, aber keine Bestätigungs-E-Mail erhalten haben, geben Sie Ihre E-Mail-Adresse unten ein und senden Sie das Formular ab. (Bitte überprüfen Sie Ihre Spam- oder Papierkorb-Ordner, um sicherzustellen, dass die E-Mail nicht versehentlich an der falschen Stelle abgelegt wurde!)",
|
||||
'mailChangeOk' => "Ihre E-Mail-Adresse wurde erfolgreich geändert.",
|
||||
'mailRevertOk' => "Ihre Anfrage zur Änderung der E-Mail-Adresse wurde storniert/zurückgesetzt.",
|
||||
'passChangeOk' => "Ihr Kennwort wurde erfolgreich geändert.",
|
||||
'deleteAccSent' => "Eine E-Mail mit einem Bestätigungslink wurde an %s gesendet.",
|
||||
'deleteOk' => "Ihr Konto wurde erfolgreich entfernt. Wir hoffen, Sie bald wiederzusehen!<br /><br /> Sie können dieses Fenster jetzt schließen.",
|
||||
'createAccSent' => 'Eine Nachricht wurde soeben an <b>%s</b> versandt. Folgt einfach den darin enthaltenen Anweisungen, um Euer Konto zu erstellen.<br /><br />Falls du keine Bestätigungsnachricht erhalten hast <a href="?account=resend">klicke hier</a> um eine neue zu senden.</div>',
|
||||
'recovUserSent' => "Eine Nachricht wurde soeben an <b>%s</b> versandt. Folgt einfach den darin enthaltenen Anweisungen, um euren Benutzernamen zu erhalten.",
|
||||
'recovPassSent' => "Eine Nachricht wurde soeben an <b>%s</b> versandt. Folgt einfach den darin enthaltenen Anweisungen, um euer Kennwort zurückzusetzen.",
|
||||
),
|
||||
'error' => array(
|
||||
'mailTokenUsed' => 'Dieser Schlüssel zur Änderung der E-Mail-Adresse wurde entweder bereits verwendet oder ist ungültig. Besuchen Sie Ihre <a href="?account#personal">Kontoeinstellungen</a>, um es erneut zu versuchen.',
|
||||
'passTokenUsed' => 'Dieser Schlüssel zur Änderung des Kennworts wurde entweder bereits verwendet oder ist ungültig. Besuchen Sie Ihre <a href="?account#personal">Kontoeinstellungen</a>, um es erneut zu versuchen.',
|
||||
'passTokenLost' => "Kein Token wurde bereitgestellt. Wenn Sie in einer E-Mail einen Link zum Zurücksetzen des Kennworts erhalten haben, kopieren Sie die gesamte URL (einschließlich des Tokens am Ende) in die Adressleiste Ihres Browsers.",
|
||||
'isRecovering' => "Dieses Konto wird bereits wiederhergestellt. Folgt den Anweisungen in der Nachricht oder wartet %s bis das Token verfällt.",
|
||||
'loginExceeded' => "Die maximale Anzahl an Anmelde-Versuchen von dieser IP wurde überschritten. Bitte versucht es in %s erneut.",
|
||||
'signupExceeded' => "Die maximale Anzahl an Registrierungen von dieser IP wurde überschritten. Bitte versucht es in %s erneut.",
|
||||
// 'emailNotFound' => "Die E-Mail-Adresse, die Ihr eingegeben habt, ist mit keinem Konto verbunden.<br /><br />Falls Ihr die E-Mail-Adresse vergessen habt, mit der Ihr Euer Konto erstellt habt, kontaktiert Ihr bitte CFG_CONTACT_EMAIL für Hilfestellung.",
|
||||
'emailNotFound' => "Diese E-Mail-Adresse wurde in unserem System nicht gefunden.",
|
||||
)
|
||||
)
|
||||
),
|
||||
'user' => array(
|
||||
'notFound' => "Der Benutzer \"%s\" wurde nicht gefunden!",
|
||||
@@ -1241,7 +1320,7 @@ $lang = array(
|
||||
'floorN' => "%d. Stockwerk"
|
||||
),
|
||||
'privileges' => array(
|
||||
'main' => "Auf unserer Seite könnt Ihr <a href=\"?reputation\">Ruf</a> erringen. Hauptsächlich erringt man Ruf dadurch, dass Eure Kommentare positiv bewertet werden.<br><br>Das heißt, Euer Ruf hängt in gewissem Maße davon ab, wie sehr Ihr der Community beiträgt.<br><br>Mit dem Sammeln von Ruf verdient Ihr Euch auch das Vertrauen der Gemeinschaft ein, und Ihr erhält Privilegien. Unten könnt Ihr eine vollständige Liste einsehen.",
|
||||
'main' => "Auf unserer Seite könnt Ihr <a href=\"?reputation\">Ruf</a> erringen. Hauptsächlich erringt man Ruf dadurch, dass Eure Kommentare positiv bewertet werden.<br /><br />Das heißt, Euer Ruf hängt in gewissem Maße davon ab, wie sehr Ihr der Community beiträgt.<br /><br />Mit dem Sammeln von Ruf verdient Ihr Euch auch das Vertrauen der Gemeinschaft ein, und Ihr erhält Privilegien. Unten könnt Ihr eine vollständige Liste einsehen.",
|
||||
'privilege' => "Privileg",
|
||||
'privileges' => "Privilegien",
|
||||
'requiredRep' => "Benötigter Ruf",
|
||||
|
||||
@@ -28,7 +28,7 @@ $lang = array(
|
||||
'numSQL' => "Number of SQL queries",
|
||||
'timeSQL' => "Time of SQL queries",
|
||||
'noJScript' => '<b>This site makes extensive use of JavaScript.</b><br />Please <a href="https://www.google.com/support/adsense/bin/answer.py?answer=12654" target="_blank">enable JavaScript</a> in your browser.',
|
||||
'userProfiles' => "My Profiles",
|
||||
// 'userProfiles' => "My Profiles",
|
||||
'pageNotFound' => "This %s doesn't exist.",
|
||||
'gender' => "Gender",
|
||||
'sex' => [null, "Male", "Female"],
|
||||
@@ -40,12 +40,13 @@ $lang = array(
|
||||
'side' => "Side: ",
|
||||
'related' => "Related",
|
||||
'contribute' => "Contribute",
|
||||
// 'replyingTo' => "The answer to a comment from",
|
||||
// 'replyingTo' => "The answer to a comment from",
|
||||
'submit' => "Submit",
|
||||
'save' => 'Save',
|
||||
'cancel' => "Cancel",
|
||||
'rewards' => "Rewards",
|
||||
'gains' => "Gains",
|
||||
'login' => "Login",
|
||||
// 'login' => "Login",
|
||||
'forum' => "Forum",
|
||||
'siteRep' => "Reputation: ",
|
||||
'yourRepHistory'=> "Your Reputation History",
|
||||
@@ -132,6 +133,7 @@ $lang = array(
|
||||
'colon' => ': ',
|
||||
'dateFmtShort' => "Y/m/d",
|
||||
'dateFmtLong' => "Y/m/d \a\\t g:i A",
|
||||
'dateFmtUntil' => "F j, Y",
|
||||
'timeAgo' => "%s ago",
|
||||
'nfSeparators' => [',', '.'],
|
||||
|
||||
@@ -900,7 +902,6 @@ $lang = array(
|
||||
"Screenshot manager", "Video manager", "API partner", "Pending"
|
||||
),
|
||||
// signIn
|
||||
'doSignIn' => "Log in to your Account",
|
||||
'signIn' => "Log In",
|
||||
'user' => "Username",
|
||||
'pass' => "Password",
|
||||
@@ -909,25 +910,22 @@ $lang = array(
|
||||
'forgotUser' => "Username",
|
||||
'forgotPass' => "Password",
|
||||
'accCreate' => 'Don\'t have an account? <a href="?account=signup">Create one now!</a>',
|
||||
'resendMail' => "Re-Send Verification Email",
|
||||
'resendHint' => "If you registered but did not receive a verification email, enter your email address below and submit the form. (Please be sure to check your spam or trash folders to make sure the email didn't accidentally get put in the wrong place!)",
|
||||
|
||||
// recovery
|
||||
'recoverUser' => "Username Request",
|
||||
'recoverPass' => "Password Reset: Step %s of 2",
|
||||
'newPass' => "New Password",
|
||||
'tokenExpires' => "This token expires in %s.",
|
||||
'newPass' => "New Password:",
|
||||
'confNewPass' => "Confirm new password:",
|
||||
'passResetHint' => 'If you don\'t know your password, visit the <a href="?account=forgot-password">password reset page</a> to reset it.',
|
||||
// 'tokenExpires' => "This token expires in %s.", // previously appended to all emails, now it's part of the mail template
|
||||
|
||||
// creation
|
||||
'register' => "Registration - Step %s of 2",
|
||||
'passConfirm' => "Confirm password",
|
||||
'passConfirm' => "Confirm password:",
|
||||
|
||||
// dashboard
|
||||
'ipAddress' => "IP address: ",
|
||||
'lastIP' => "last used IP: ",
|
||||
// 'myAccount' => "My Account",
|
||||
// 'editAccount' => "Simply use the forms below to update your account information",
|
||||
// 'viewPubDesc' => 'View your Public Description in your <a href="?user=%s">Profile Page</a>',
|
||||
// 'myAccount' => "My Account",
|
||||
// 'editAccount' => "Simply use the forms below to update your account information.",
|
||||
// 'viewPubDesc' => 'View your Public Description in your <a href="?user=%s">Profile Page</a>',
|
||||
|
||||
// bans
|
||||
'accBanned' => "This account was closed",
|
||||
@@ -939,25 +937,106 @@ $lang = array(
|
||||
|
||||
// form-text
|
||||
'emailInvalid' => "That email address is not valid.", // message_emailnotvalid
|
||||
'emailNotFound' => "The email address you entered is not associated with any account.<br><br>If you forgot the email you registered your account with email CFG_CONTACT_EMAIL for assistance.",
|
||||
'createAccSent' => "An email was sent to <b>%s</b>. Simply follow the instructions to create your account.",
|
||||
'recovUserSent' => "An email was sent to <b>%s</b>. Simply follow the instructions to recover your username.",
|
||||
'recovPassSent' => "An email was sent to <b>%s</b>. Simply follow the instructions to reset your password.",
|
||||
'accActivated' => 'Your account has been activated.<br>Proceed to <a href="?account=signin&token=%s">sign in</a>',
|
||||
'userNotFound' => "The username you entered does not exists.",
|
||||
'wrongPass' => "That password is not vaild.",
|
||||
// 'accInactive' => "That account has not yet been confirmed active.",
|
||||
'loginExceeded' => "The maximum number of logins from this IP has been exceeded. Please try again in %s.",
|
||||
'signupExceeded'=> "The maximum number of signups from this IP has been exceeded. Please try again in %s.",
|
||||
// 'accInactive' => "That account has not yet been confirmed active.",
|
||||
'errNameLength' => "Your username must be at least 4 characters long.", // message_usernamemin
|
||||
'errNameChars' => "Your username can only contain letters and numbers.", // message_usernamenotvalid
|
||||
'errPassLength' => "Your password must be at least 6 characters long.", // message_passwordmin
|
||||
'passMismatch' => "The passwords you entered do not match.",
|
||||
'nameInUse' => "That username is already taken.",
|
||||
'nameInUse' => "This username is already in use.",
|
||||
'mailInUse' => "That email is already registered to an account.",
|
||||
'isRecovering' => "This account is already recovering. Follow the instructions in your email or wait %s for the token to expire.",
|
||||
'passCheckFail' => "Passwords do not match.", // message_passwordsdonotmatch
|
||||
'newPassDiff' => "Your new password must be different than your previous one." // message_newpassdifferent
|
||||
'newPassDiff' => "Your new password must be different than your previous one.", // message_newpassdifferent
|
||||
'newMailDiff' => "Your new email address must be different than your previous one.", // message_newemaildifferent
|
||||
|
||||
// settings
|
||||
'settings' => "Account Settings",
|
||||
'settingsNote' => "Simply use the forms below to update your account information.",
|
||||
'tabGeneral' => "General",
|
||||
'tabPersonal' => "Personal",
|
||||
'tabCommunity' => "Community",
|
||||
'tabPremium' => "Premium",
|
||||
'preferences' => "Preferences",
|
||||
'modelviewer' => "Model Viewer",
|
||||
'mvNote' => "Default character model:",
|
||||
'lists' => "Lists",
|
||||
'listsNote' => "Show IDs in supported lists",
|
||||
'announcements' => "Announcements",
|
||||
'annNote' => "Removes data related to announcements you have closed so that they may be viewed again.",
|
||||
'purge' => "Purge",
|
||||
'curPass' => "Current password:",
|
||||
'globalLogout' => "Log me out of all other browsers/devices",
|
||||
'curEmail' => "Current email address:",
|
||||
'newEmail' => "New email address:",
|
||||
'userPage' => "User Page",
|
||||
'publicDesc' => "Public Description",
|
||||
'publicDescNote'=> 'Tell us more about yourself and your WoW characters. Whatever you type here will appear on your <a href="?user=%s">user page</a>.',
|
||||
'forums' => "Forums",
|
||||
'signature' => "Signature",
|
||||
'signatureNote' => "Your signature will appear beneath all of your posts in the forums.",
|
||||
'usernameNote' => "Usernames can only be changed once every %s and must be between 4-16 characters. No special characters are permitted.",
|
||||
'curName' => "Current Username:",
|
||||
'newName' => "New Username:",
|
||||
'accDelete' => "Delete Account",
|
||||
'accDeleteNote' => "If you'd like to completely delete your account and all its personal information, visit our <a href=\"?account=delete\" style=\"color:inherit; text-decoration:underline\">account deletion page</a>.",
|
||||
'avatar' => "Avatar",
|
||||
'avatarNote' => "Your avatar will appear next to all of your posts in the forums.",
|
||||
'avWowIcon' => "Icon from World of Warcraft",
|
||||
'avWowIconNote' => '<span class="q0">e.g. INV_Axe_54</span><br />Tip: To find the name of an icon, simply double-click the big icon while<br />browsing an <a href="?item=22632" target="_blank">item</a> or <a href="?spell=29516" target="_blank">spell</a> page. Then copy and paste it above.',
|
||||
'avIconName' => "Icon name:",
|
||||
'none' => "None",
|
||||
'preview' => "Preview",
|
||||
'custom' => "Custom",
|
||||
'premiumStatus' => "Premium Status",
|
||||
'status' => "Status",
|
||||
'active' => "Active",
|
||||
'inactive' => "Inactive",
|
||||
'activeCD' => "You must wait until %s to change your username again.",
|
||||
'updateMessage' => array(
|
||||
'general' => "Updated your preferences.",
|
||||
'community' => "Your public description and forum signature have been updated successfully.",
|
||||
'personal' => "A confirmation email was sent to %s.",
|
||||
'username' => 'Username changed from %1$s to %2$s.',
|
||||
'avNotFound' => "Icon not found.",
|
||||
'avSuccess' => "Your avatar has been updated successfully.",
|
||||
'avNoChange' => "No changes were made.",
|
||||
'av1stUser' => "Congratulations for picking one that is unique! /cheer",
|
||||
'avNthUser' => "FYI, your icon is also used by %d other user(s)."
|
||||
),
|
||||
'inputbox' => array(
|
||||
'head' => array(
|
||||
'success' => "Success",
|
||||
'error' => "Oops!",
|
||||
'register' => "Registration - Step %s of 2",
|
||||
'recoverUser' => "Username Request",
|
||||
'recoverPass' => "Password Reset: Step %s of 2",
|
||||
'resendMail' => "Re-Send Verification Email",
|
||||
'signin' => "Log in to your Account"
|
||||
),
|
||||
'message' => array(
|
||||
'accActivated' => 'Your account has been activated.<br />Proceed to <a href="?account=signin&key=%s">sign in</a>',
|
||||
'resendMail' => "If you registered but did not receive a verification email, enter your email address below and submit the form. (Please be sure to check your spam or trash folders to make sure the email didn't accidentally get put in the wrong place!)",
|
||||
'mailChangeOk' => "Your email address has been changed successfully.",
|
||||
'mailRevertOk' => "Your email change request has been cancelled/reverted.",
|
||||
'passChangeOk' => "Your password has been changed successfully.",
|
||||
'deleteAccSent' => "An email has been sent to %s with confirmation link attached.",
|
||||
'deleteOk' => "Your account has been successfully removed. We hope to see you again soon!<br /><br /> You may now close this window.",
|
||||
'createAccSent' => 'An email was sent to <b>%s</b>. Simply follow the instructions to create your account.<br /><br />If you don\'t receive the verification email, <a href="?account=resend">click here</a> to send another one.</div>',
|
||||
'recovUserSent' => "An email was sent to <b>%s</b>. Simply follow the instructions to recover your username.",
|
||||
'recovPassSent' => "An email was sent to <b>%s</b>. Simply follow the instructions to reset your password."
|
||||
),
|
||||
'error' => array(
|
||||
'mailTokenUsed' => 'Either that email change key has already been used, or it\'s not a valid key. Visit your <a href="?account#personal">Account Settings page</a> to try again.',
|
||||
'passTokenUsed' => 'Either that password change key has already been used, or it\'s not a valid key. Visit your <a href="?account#personal">Account Settings page</a> to try again.',
|
||||
'passTokenLost' => "No token was provided. If you received a reset password link in an email, please copy and paste the entire URL (including the token at the end) into your browser's location bar.",
|
||||
'isRecovering' => "This account is already recovering. Follow the instructions in your email or wait %s for the token to expire.",
|
||||
'loginExceeded' => "The maximum number of logins from this IP has been exceeded. Please try again in %s.",
|
||||
'signupExceeded' => "The maximum number of signups from this IP has been exceeded. Please try again in %s.",
|
||||
// 'emailNotFound' => "The email address you entered is not associated with any account.<br /><br />If you forgot the email you registered your account with email CFG_CONTACT_EMAIL for assistance.",
|
||||
'emailNotFound' => "That email address wasn't found in our system."
|
||||
)
|
||||
)
|
||||
),
|
||||
'user' => array(
|
||||
'notFound' => "User \"%s\" not found!",
|
||||
@@ -1241,7 +1320,7 @@ $lang = array(
|
||||
'floorN' => "Level %d"
|
||||
),
|
||||
'privileges' => array(
|
||||
'main' => "Here on our Site you can generate <a href=\"?reputation\">reputation</a>. The main way to generate it is to get your comments upvotes.<br><br>So, reputation is a rough measure of how much you contributed to the community.<br><br>As you amass reputation you earn the community's trust and you will be granted with additional privileges. You can find a full list below.",
|
||||
'main' => "Here on our Site you can generate <a href=\"?reputation\">reputation</a>. The main way to generate it is to get your comments upvotes.<br /><br />So, reputation is a rough measure of how much you contributed to the community.<br /><br />As you amass reputation you earn the community's trust and you will be granted with additional privileges. You can find a full list below.",
|
||||
'privilege' => "Privilege",
|
||||
'privileges' => "Privileges",
|
||||
'requiredRep' => "Reputation Required",
|
||||
|
||||
@@ -28,7 +28,7 @@ $lang = array(
|
||||
'numSQL' => "Número de consultas de SQL",
|
||||
'timeSQL' => "El tiempo para las consultas de SQL",
|
||||
'noJScript' => '<b>Este sitio hace uso intenso de JavaScript.</b><br />Por favor <a href="https://www.google.com/support/adsense/bin/answer.py?answer=12654" target="_blank">habilita JavaScript</a> en tu navegador.',
|
||||
'userProfiles' => "Tus personajes",
|
||||
// 'userProfiles' => "Tus personajes",
|
||||
'pageNotFound' => "Este %s no existe.",
|
||||
'gender' => "Género",
|
||||
'sex' => [null, "Hombre", "Mujer"],
|
||||
@@ -40,12 +40,13 @@ $lang = array(
|
||||
'side' => "Lado: ",
|
||||
'related' => "Información relacionada",
|
||||
'contribute' => "Contribuir",
|
||||
// 'replyingTo' => "The answer to a comment from",
|
||||
// 'replyingTo' => "The answer to a comment from",
|
||||
'submit' => "Enviar",
|
||||
'save' => 'Guardar',
|
||||
'cancel' => "Cancelar",
|
||||
'rewards' => "Recompensas",
|
||||
'gains' => "Ganancias",
|
||||
'login' => "Ingresar",
|
||||
// 'login' => "Ingresar",
|
||||
'forum' => "Foro",
|
||||
'siteRep' => "Reputación: ",
|
||||
'yourRepHistory'=> "Tu Historial de Reputación",
|
||||
@@ -132,6 +133,7 @@ $lang = array(
|
||||
'colon' => ': ',
|
||||
'dateFmtShort' => "d/m/Y",
|
||||
'dateFmtLong' => "d/m/Y \a \l\a\s g:i A",
|
||||
'dateFmtUntil' => "j \d\\e F \d\\e Y",
|
||||
'timeAgo' => 'hace %s',
|
||||
'nfSeparators' => ['.', ','],
|
||||
|
||||
@@ -900,7 +902,6 @@ $lang = array(
|
||||
"Gestor de Capturas de pantalla","Gestor de vídeos", "Partner de API", "Pendiente"
|
||||
),
|
||||
// signIn
|
||||
'doSignIn' => "Iniciar sesión con tu cuenta",
|
||||
'signIn' => "Iniciar sesión",
|
||||
'user' => "Nombre de usuario",
|
||||
'pass' => "Contraseña",
|
||||
@@ -909,25 +910,22 @@ $lang = array(
|
||||
'forgotUser' => "Nombre de usuario",
|
||||
'forgotPass' => "Contraseña",
|
||||
'accCreate ' => '¿No tienes una cuenta? <a href="?account=signup">¡Crea una ahora!</a>',
|
||||
'resendMail' => "Reenviar correo de verificación",
|
||||
'resendHint' => "Si te has registrado pero no recibiste un correo de verificación, introduce tu dirección de correo más abajo y completa el formulario. (¡Por favor, asegúrate de comprobar tus directorios de correo no deseado o papelera por si el correo acabara en el lugar equivocado!)",
|
||||
|
||||
// recovery
|
||||
'recoverUser' => "Pedir nombre de usuario",
|
||||
'recoverPass' => "Reiniciar contraseña: Paso %s de 2",
|
||||
'newPass' => "Nueva Contraseña",
|
||||
'tokenExpires' => "Este token expira en %s",
|
||||
'newPass' => "Nueva Contraseña:",
|
||||
'confNewPass' => "Confirmar contraseña nueva:",
|
||||
'passResetHint' => 'Si no sabes tu contraseña, visita la <a href="?account=forgot-password">página de restablecimiento de contraseña</a> para restablecerla.',
|
||||
// 'tokenExpires' => "Este token expira en %s",
|
||||
|
||||
// creation
|
||||
'register' => "Inscripción: Paso %s de 2",
|
||||
'passConfirm' => "Confirmar contraseña",
|
||||
'passConfirm' => "Confirmar contraseña:",
|
||||
|
||||
// dashboard
|
||||
'ipAddress' => "Dirección IP: ",
|
||||
'lastIP' => "Última IP usada: ",
|
||||
// 'myAccount' => "Mi cuenta",
|
||||
// 'editAccount' => "Use el formulario siguienta para actualizar la información de la cuenta.",
|
||||
// 'viewPubDesc' => 'Mira tu descripción pública en tu <a href="?user=%s">Página de perfil</a>',
|
||||
// 'myAccount' => "Mi cuenta",
|
||||
// 'editAccount' => "Use el formulario siguienta para actualizar la información de la cuenta.",
|
||||
// 'viewPubDesc' => 'Mira tu descripción pública en tu <a href="?user=%s">Página de perfil</a>',
|
||||
|
||||
// bans
|
||||
'accBanned' => "Esta cuenta fue cerrada.",
|
||||
@@ -939,25 +937,106 @@ $lang = array(
|
||||
|
||||
// form-text
|
||||
'emailInvalid' => "Esa dirección de correo electrónico no es válida.", // message_emailnotvalid
|
||||
'emailNotFound' => "El correo electrónico que ingresaste no está asociado con ninguna cuenta.<br><br>Si olvistaste el correo electronico con el que registraste la cuenta, escribe a CFG_CONTACT_EMAIL para asistencia.",
|
||||
'createAccSent' => "Un correo fue enviado a <b>%s</b>. Siga las instrucciones para crear su cuenta.",
|
||||
'recovUserSent' => "Un correo fue enviado a <b>%s</b>. Siga las instrucciones para recuperar su nombre de usuario.",
|
||||
'recovPassSent' => "Un correo fue enviado a <b>%s</b>. Siga las instrucciones para reiniciar su contraseña.",
|
||||
'accActivated' => 'Su cuenta ha sido activada.<br>Ingrese a <a href="?account=signin&token=%s">para ingresar</a>',
|
||||
'userNotFound' => "El usuario que ha ingresado no existe",
|
||||
'wrongPass' => "La contraseña no es valida.",
|
||||
// 'accInactive' => "That account has not yet been confirmed active.",
|
||||
'loginExceeded' => "Ha excedido la cantidad de inicios de sesion con esta IP. Por favor intente en %s",
|
||||
'signupExceeded'=> "Ha excedido la cantidad de creaciones de cuentas con esta IP. Por favor intente en %s.",
|
||||
// 'accInactive' => "That account has not yet been confirmed active.",
|
||||
'errNameLength' => "Tu nombre de usuario tiene que tener por lo menos cuatro caracteres.", // message_usernamemin
|
||||
'errNameChars' => "Tu nombre de usuario solo puede contener números y letras.", // message_usernamenotvalid
|
||||
'errPassLength' => "Tu contraseña tiene que tener por lo menos seis caracteres.", // message_passwordmin
|
||||
'passMismatch' => "La contraseña que ingresó no concuerdan.",
|
||||
'nameInUse' => "El nombre de usuario ya se encuentra utilzado",
|
||||
'mailInUse' => "El correo electrónico ya se encuentra registrado a una cuenta",
|
||||
'isRecovering' => "Esta cuenta ya se encuentra en proceso de recuperación. Siga las intrucciones en su correo o espere %s para que el token expire ",
|
||||
'passCheckFail' => "Las contraseñas no son iguales.", // message_passwordsdonotmatch
|
||||
'newPassDiff' => "Su nueva contraseña tiene que ser diferente a su contraseña anterior." // message_newpassdifferent
|
||||
'newPassDiff' => "Su nueva contraseña tiene que ser diferente a su contraseña anterior.",// message_newpassdifferent
|
||||
'newMailDiff' => "Su nueva dirección de correo electrónico tiene que ser diferente a tu dirección de correo electrónico anterior.", // message_newemaildifferent
|
||||
|
||||
// settings
|
||||
'settings' => "Mi cuenta",
|
||||
'settingsNote' => "Simplemente usa el siguiente formulario para actualizar la información de tu cuenta.",
|
||||
'tabGeneral' => "General",
|
||||
'tabPersonal' => "Personal",
|
||||
'tabCommunity' => "Comunidad",
|
||||
'tabPremium' => "Premium",
|
||||
'preferences' => "Preferencias",
|
||||
'modelviewer' => "Visualizador de modelos",
|
||||
'mvNote' => "Modelo de personaje por defecto:",
|
||||
'lists' => "Listas",
|
||||
'listsNote' => "Mostrar IDs en listas soportadas",
|
||||
'announcements' => "Anuncios",
|
||||
'annNote' => "Elimina datos relacionados con anuncios que hayas cerrado para que puedan ser vistos de nuevo.",
|
||||
'purge' => "Purgar",
|
||||
'curPass' => "Contraseña actual:",
|
||||
'globalLogout' => "Cerrar sesión en todos los otros navegadores/dispositivos",
|
||||
'curEmail' => "Dirección de correo electrónico actual",
|
||||
'newEmail' => "Dirección de correo electrónico nueva",
|
||||
'userPage' => "Página de usuario",
|
||||
'publicDesc' => "Descripción pública",
|
||||
'publicDescNote'=> 'Dinos más sobre ti y tus personajes de WoW. Lo que escribas aquí aparecerá en tu <a href="?user=%s">página de usuario</a>.',
|
||||
'forums' => "Foros",
|
||||
'signature' => "Firma",
|
||||
'signatureNote' => "Tu firma aparecerá debajo de todos tus mensajes en los foros.",
|
||||
'usernameNote' => "Los nombres de usuario solo pueden cambiarse una vez cada %s y deben tener entre 4 y 16 caracteres. No se permiten caracteres especiales.",
|
||||
'curName' => "Nombre de Usuario Actual:",
|
||||
'newName' => "Nuevo Nombre de Usuario:",
|
||||
'accDelete' => "Eliminar Cuenta",
|
||||
'accDeleteNote' => 'Si quieres eliminar completamente tu cuenta y toda tu información personal, visita nuestra <a href="?account=delete" style="color:inherit; text-decoration:underline">página de eliminación de cuenta</a>.',
|
||||
'avatar' => "Avatar",
|
||||
'avatarNote' => "Tu avatar aparecerá al lado de todos tus mensajes en los foros.",
|
||||
'avWowIcon' => "Ícono de World of Warcraft",
|
||||
'avWowIconNote' => '<span class="q0">ej. INV_Axe_54</span><br />Sugerencia: Para encontrar el nombre de un icono, simplemente haz doble-clic en el icono grande mientras estás viendo una página de un <a href="?item=22632" target="_blank">objeto</a> o un <a href="?spell=78634" target="_blank">hechizo</a>. Después cópialo arriba.',
|
||||
'avIconName' => "Nombre de ícono:",
|
||||
'none' => "Ninguno",
|
||||
'preview' => "Visualizar",
|
||||
'custom' => "Personalizado",
|
||||
'premiumStatus' => "Suscripción Premium",
|
||||
'status' => "Estado",
|
||||
'active' => "Activo",
|
||||
'inactive' => "Inactivo",
|
||||
'activeCD' => "Debes esperar hasta %s para cambiar tu nombre de usuario nuevamente.",
|
||||
'updateMessage' => array(
|
||||
'general' => "Preferencias actualizadas.",
|
||||
'community' => "Tu descripción pública y tu firma en el foro se han actualizado correctamente.",
|
||||
'personal' => "Se envió un correo electrónico de confirmación a %s.",
|
||||
'username' => 'Nombre de usuario cambiado de %1$s a %2$s.',
|
||||
'avNotFound' => "No se encontró este avatar.",
|
||||
'avSuccess' => "Tu avatar ha sido actualizado correctamente.",
|
||||
'avNoChange' => "No se hicieron cambios.",
|
||||
'av1stUser' => "¡Felicidades, tienes un avatar único! /hurra",
|
||||
'avNthUser' => "Para tu información, tu avatar también está siendo usado por %d otros usuarios."
|
||||
),
|
||||
'inputbox' => array(
|
||||
'head' => array(
|
||||
'success' => "Éxito",
|
||||
'error' => "¡Ups!",
|
||||
'register' => "Inscripción: Paso %s de 2",
|
||||
'recoverUser' => "Solicitar nombre de usuario",
|
||||
'recoverPass' => "Restablecer contraseña: Paso %s de 2",
|
||||
'resendMail' => "Reenviar correo de verificación",
|
||||
'signin' => "Iniciar sesión con tu cuenta"
|
||||
),
|
||||
'message' => array(
|
||||
'accActivated' => 'Su cuenta ha sido activada.<br />Ingrese a <a href="?account=signin&key=%s">para ingresar</a>',
|
||||
'resendMail' => "Si te has registrado pero no recibiste un correo de verificación, introduce tu dirección de correo más abajo y completa el formulario. (¡Por favor, asegúrate de comprobar tus directorios de correo no deseado o papelera por si el correo acabara en el lugar equivocado!)",
|
||||
'mailChangeOk' => "Tu dirección de correo electrónico ha sido cambiada correctamente.",
|
||||
'mailRevertOk' => "Tu solicitud de cambio de correo electrónico ha sido cancelada/revertida.",
|
||||
'passChangeOk' => "Tu contraseña ha sido cambiada correctamente.",
|
||||
'deleteAccSent' => "Se ha enviado un correo electrónico a %s con el enlace de confirmación adjunto.",
|
||||
'deleteOk' => "Tu cuenta ha sido eliminada correctamente. ¡Esperamos verte de nuevo pronto!<br /><br /> Ahora puedes cerrar esta ventana.",
|
||||
'createAccSent' => 'Un correo fue enviado a <b>%s</b>. Sigue las instrucciones para crear tu cuenta.<br /><br />Si no recibes el correo de verificación, <a href="?account=resend">haz clic aquí</a> para enviar otro.',
|
||||
'recovUserSent' => "Un correo fue enviado a <b>%s</b>. Sigue las instrucciones para recuperar tu nombre de usuario.",
|
||||
'recovPassSent' => "Un correo fue enviado a <b>%s</b>. Sigue las instrucciones para restablecer tu contraseña."
|
||||
),
|
||||
'error' => array(
|
||||
'mailTokenUsed' => 'Ese código de cambio de correo electrónico ya ha sido usado, o no es válido. Visita tu <a href="?account#personal">página de configuración de cuenta</a> para intentarlo de nuevo.',
|
||||
'passTokenUsed' => 'Ese código de cambio de contraseña ya ha sido usado, o no es válido. Visita tu <a href="?account#personal">página de configuración de cuenta</a> para intentarlo de nuevo.',
|
||||
'passTokenLost' => "No se recibió ningún código de petición. Si recibiste un enlace para restablecer tu contraseña por correo, por favor copia y pega la dirección completa (incluyendo el código del final) en la barra de dirección de tu navegador.",
|
||||
'isRecovering' => "Esta cuenta ya se encuentra en proceso de recuperación. Sigue las instrucciones en tu correo o espera %s para que el token expire.",
|
||||
'loginExceeded' => "Has excedido la cantidad de inicios de sesión con esta IP. Por favor intenta en %s.",
|
||||
'signupExceeded' => "Has excedido la cantidad de creaciones de cuentas con esta IP. Por favor intenta en %s.",
|
||||
// 'emailNotFound' => "El correo electrónico que ingresaste no está asociado con ninguna cuenta.<br /><br />Si olvistaste el correo electronico con el que registraste la cuenta, escribe a CFG_CONTACT_EMAIL para asistencia.",
|
||||
'emailNotFound' => "Esa dirección de correo electrónico no fue encontrada en nuestro sistema."
|
||||
)
|
||||
)
|
||||
),
|
||||
'user' => array(
|
||||
'notFound' => "¡No se encontró el usuario \"%s\"!",
|
||||
|
||||
@@ -28,7 +28,7 @@ $lang = array(
|
||||
'numSQL' => "Nombre de requêtes SQL",
|
||||
'timeSQL' => "Temps d'exécution des requêtes SQL",
|
||||
'noJScript' => "<b>Ce site requiert JavaScript pour fonctionner.</b><br />Veuillez <a href=\"https://www.google.com/support/adsense/bin/answer.py?answer=12654\" target=\"_blank\">activer JavaScript</a> dans votre navigateur.",
|
||||
'userProfiles' => "Vos personnages", // translate.google :x
|
||||
// 'userProfiles' => "Vos personnages", // translate.google :x
|
||||
'pageNotFound' => "Ce %s n'existe pas.",
|
||||
'gender' => "Genre",
|
||||
'sex' => [null, "Homme", "Femme"],
|
||||
@@ -40,12 +40,13 @@ $lang = array(
|
||||
'side' => "Coté : ",
|
||||
'related' => "Informations connexes",
|
||||
'contribute' => "Contribuer",
|
||||
// 'replyingTo' => "En réponse au commentaire de",
|
||||
// 'replyingTo' => "En réponse au commentaire de",
|
||||
'submit' => "Soumettre",
|
||||
'save' => 'Sauver',
|
||||
'cancel' => "Annuler",
|
||||
'rewards' => "Récompenses",
|
||||
'gains' => "Gains",
|
||||
'login' => "[Login]",
|
||||
// 'login' => "[Login]",
|
||||
'forum' => "Forum",
|
||||
'siteRep' => "Réputation : ",
|
||||
'yourRepHistory'=> "Votre historique de réputation",
|
||||
@@ -132,6 +133,7 @@ $lang = array(
|
||||
'colon' => ' : ',
|
||||
'dateFmtShort' => "Y-m-d",
|
||||
'dateFmtLong' => "Y-m-d à g:i A",
|
||||
'dateFmtUntil' => "j F Y",
|
||||
'timeAgo' => 'il y a %s',
|
||||
'nfSeparators' => [' ', ','],
|
||||
|
||||
@@ -900,7 +902,6 @@ $lang = array(
|
||||
"Gestionnaire de capture d'écran","Gestionnaire de vidéos", "Partenaire API", "En attente"
|
||||
),
|
||||
// signIn
|
||||
'doSignIn' => "Connexion à votre compte",
|
||||
'signIn' => "Connexion",
|
||||
'user' => "Nom d'utilisateur",
|
||||
'pass' => "Mot de passe",
|
||||
@@ -909,25 +910,22 @@ $lang = array(
|
||||
'forgotUser' => "Nom d'utilisateur",
|
||||
'forgotPass' => "Mot de passe",
|
||||
'accCreate' => 'Vous n\'avez pas encore de compte ? <a href="/?account=signup">Créez-en un maintenant !</a>',
|
||||
'resendMail' => "Renvoyer le courriel de vérification",
|
||||
'resendHint' => "Si vous vous êtes enregistré mais n'avez pas reçu de courriel de vérification, entrez votre adresse électronique ci-dessous et validez le formulaire. (Assurez-vous de vérifier vos dossiers de courrier indésirable et votre corbeille pour vous assurer que le courriel ne s'y soit pas perdu !)",
|
||||
|
||||
// recovery
|
||||
'recoverUser' => "Demande de nom d'utilisateur",
|
||||
'recoverPass' => "Changement de mot de passe : Étape %s de 2",
|
||||
'newPass' => "Nouveau mot de passe",
|
||||
'tokenExpires' => "This token expires in %s.",
|
||||
'newPass' => "Nouveau mot de passe :",
|
||||
'confNewPass' => "Confirm new password:",
|
||||
'passResetHint' => 'Si vous ne connaissez pas votre mot de passe, rendez-vous sur la <a href="?account=forgot-password">page de réinitialisation du mot de passe</a> pour le réinitialiser.',
|
||||
// 'tokenExpires' => "This token expires in %s.",
|
||||
|
||||
// creation
|
||||
'register' => "Enregistrement : Étape %s de 2",
|
||||
'passConfirm' => "Confirmez",
|
||||
'passConfirm' => "Confirmez :",
|
||||
|
||||
// dashboard
|
||||
'ipAddress' => "Addresse IP : ",
|
||||
'lastIP' => "Dernière IP utilisée : ",
|
||||
// 'myAccount' => "Mon compte",
|
||||
// 'editAccount' => "Utilisez les formulaires ci-dessous pour mettre à jour vos informations.",
|
||||
// 'viewPubDesc' => 'Voyez vos informations publiques dans votre <a href="?user=%s">Profile Page</a>',
|
||||
// 'myAccount' => "Mon compte",
|
||||
// 'editAccount' => "Utilisez les formulaires ci-dessous pour mettre à jour vos informations.",
|
||||
// 'viewPubDesc' => 'Voyez vos informations publiques dans votre <a href="?user=%s">Profile Page</a>',
|
||||
|
||||
// bans
|
||||
'accBanned' => "Ce compte a été fermé.",
|
||||
@@ -939,25 +937,106 @@ $lang = array(
|
||||
|
||||
// form-text
|
||||
'emailInvalid' => "Cette adresse courriel est invalide.", // message_emailnotvalid
|
||||
'emailNotFound' => "L'address email que vous avez entrée n'est pas associée à un compte.<br><br>Si vous avez oublié l'address email avec laquelle vous avez enregistré votre compteCFG_CONTACT_EMAIL pour obtenir de l'aide.",
|
||||
'createAccSent' => "Un email a été envoyé à <b>%s</b>. Suivez les instructions pour créer votre compte.",
|
||||
'recovUserSent' => "Un email a été envoyé à <b>%s</b>. Suivez les instructions pour récupérer votre nom d'utilisateur.",
|
||||
'recovPassSent' => "Un email a été envoyé à <b>%s</b>. Suivez les instructions pour réinitialiser votre mot de passe.",
|
||||
'accActivated' => 'Votre compte a été activé.<br>Vous pouvez maintenant <a href="?account=signin&token=%s">vous connecter</a>',
|
||||
'userNotFound' => "Le nom d'utilisateur que vous avez saisi n'éxiste pas.",
|
||||
'wrongPass' => "Ce mot de passe est invalide.",
|
||||
// 'accInactive' => "Ce compte n'a pas encore été activé.",
|
||||
'loginExceeded' => "Le nombre maximum de connections depuis cette IP a été dépassé. Essayez de nouevau dans %s.",
|
||||
'signupExceeded'=> "Le nombre maximum d'inscriptions depuis cette IP a été dépassé. Essayez de nouveau dans %s.",
|
||||
// 'accInactive' => "Ce compte n'a pas encore été activé.",
|
||||
'errNameLength' => "Votre nom d'utilisateur doit faire au moins 4 caractères de long.", // message_usernamemin
|
||||
'errNameChars' => "Votre nom d'utilisateur doit contenir seulement des lettres et des chiffres.", // message_usernamenotvalid
|
||||
'errPassLength' => "Votre mot de passe doit faire au moins 6 caractères de long.", // message_passwordmin
|
||||
'passMismatch' => "Les mots de passe que vous avez saisis ne correspondent pas.",
|
||||
'nameInUse' => "Ce nom d'utilisateur est déjà utilisé.",
|
||||
'mailInUse' => "Cette addresse email est déjà liée à un compte.",
|
||||
'isRecovering' => "Ce compte est déjà en train d'être récupéré. Suivez les instruction dans l'email reçu ou attendez %s pour que le token expire.",
|
||||
'passCheckFail' => "Les mots de passe ne correspondent pas.", // message_passwordsdonotmatch
|
||||
'newPassDiff' => "Votre nouveau mot de passe doit être différent de l'ancien." // message_newpassdifferent
|
||||
'newPassDiff' => "Votre nouveau mot de passe doit être différent de l'ancien.", // message_newpassdifferent
|
||||
'newMailDiff' => "Votre nouvelle adresse courriel doit être différente de l'ancienne.", // message_newemaildifferent
|
||||
|
||||
// settings
|
||||
'settings' => "Mon compte",
|
||||
'settingsNote' => "Veuillez utiliser les formulaires ci-dessous pour apporter des changements.",
|
||||
'tabGeneral' => "Général",
|
||||
'tabPersonal' => "Personnel",
|
||||
'tabCommunity' => "Communauté",
|
||||
'tabPremium' => "Premium",
|
||||
'preferences' => "Préférences",
|
||||
'modelviewer' => "Visionneuse 3D",
|
||||
'mvNote' => "Modèle de personnage par défaut :",
|
||||
'lists' => "Listes",
|
||||
'listsNote' => "Afficher les IDs dans les listes supportées",
|
||||
'announcements' => "Annonces",
|
||||
'annNote' => "Supprimer les données relatives aux annonces que vous avez fermées pour qu'elles puissent être vues à nouveau.",
|
||||
'purge' => "Effacer",
|
||||
'curPass' => "Mot de passe actuel :",
|
||||
'globalLogout' => "Me déconnecter de tous les autres navigateurs/appareils",
|
||||
'curEmail' => "Adresse courriel actuelle :",
|
||||
'newEmail' => "Nouvelle adresse e-mail :",
|
||||
'userPage' => "Page d'utilisateur",
|
||||
'publicDesc' => "Description publique",
|
||||
'publicDescNote'=> 'Dites-nous en un peu plus sur vous et vos persos de WoW. Tout ce que vous écrivez ici apparaîtra dans votre <a href="?user=%s">page d\'utilisateur</a>.',
|
||||
'forums' => "Forum",
|
||||
'signature' => "Signature",
|
||||
'signatureNote' => "Votre signature apparaîtra en dessous de chacun de vos messages dans le forum.",
|
||||
'usernameNote' => "Les noms d'utilisateur ne peuvent être changés qu'une fois tous les %s et doivent comporter entre 4 et 16 caractères. Aucun caractère spécial n'est autorisé.",
|
||||
'curName' => "Nom d'utilisateur actuel :",
|
||||
'newName' => "Nouveau nom d'utilisateur :",
|
||||
'accDelete' => "Supprimer le compte",
|
||||
'accDeleteNote' => 'Si vous voulez complètement supprimer votre compte et toutes ses informations personnelles, visitez notre <a href="?account=delete" style="color:inherit; text-decoration:underline">page de suppression de compte</a>.',
|
||||
'avatar' => "Avatar",
|
||||
'avatarNote' => "Votre avatar apparaîtra à côté de chacun de vos messages dans le forum.",
|
||||
'avWowIcon' => "Icône de World of Warcraft ",
|
||||
'avWowIconNote' => '<span class="q0">ex. INV_Axe_54</span><br />Astuce : Pour trouver le nom d\'une icône, vous n\'avez qu\'à double-cliquer sur la grosse icône lorsque vous naviguez sur une page d\'<a href="?item=22632" target="_blank">objet</a> ou de <a href="?spell=78634" target="_blank">sort</a>. Ensuite copiez-collez le nom ci-dessous.',
|
||||
'avIconName' => "Nom de l'icône :",
|
||||
'none' => "Aucun",
|
||||
'preview' => "Aperçu",
|
||||
'custom' => "Personnalisé",
|
||||
'premiumStatus' => "Souscription Premium",
|
||||
'status' => "Statut",
|
||||
'active' => "Actives",
|
||||
'inactive' => "Inactives",
|
||||
'activeCD' => "Vous devez attendre jusqu'à %s pour changer à nouveau votre nom d'utilisateur.",
|
||||
'updateMessage' => array(
|
||||
'general' => "Vos préférences ont été mises à jour.",
|
||||
'community' => "Votre description publique et votre signature de forum ont été actualisées correctement.",
|
||||
'personal' => "Un courriel de confirmation a été envoyé à %s.",
|
||||
'username' => 'Nom d\'utilisateur changé de %1$s à %2$s.',
|
||||
'avNotFound' => "Icône non trouvée.",
|
||||
'avSuccess' => "Votre avatar a été mis à jour avec succès.",
|
||||
'avNoChange' => "Aucun changement à été fait.",
|
||||
'av1stUser' => "Félicitations pour en avoir choisir un qui est unique !",
|
||||
'avNthUser' => "Au passage, votre icône est également utilisée par %d autre(s) utilisateur(s)."
|
||||
),
|
||||
'inputbox' => array(
|
||||
'head' => array(
|
||||
'success' => "Succès",
|
||||
'error' => "Oups.",
|
||||
'register' => "Enregistrement : Étape %s de 2",
|
||||
'recoverUser' => "Demande de nom d'utilisateur",
|
||||
'recoverPass' => "Changement de mot de passe : Étape %s de 2",
|
||||
'resendMail' => "Renvoyer le courriel de vérification",
|
||||
'signin' => "Connexion à votre compte"
|
||||
),
|
||||
'message' => array(
|
||||
'accActivated' => 'Votre compte a été activé.<br />Vous pouvez maintenant <a href="?account=signin&key=%s">vous connecter</a>',
|
||||
'resendMail' => "Si vous vous êtes enregistré mais n'avez pas reçu de courriel de vérification, entrez votre adresse électronique ci-dessous et validez le formulaire. (Assurez-vous de vérifier vos dossiers de courrier indésirable et votre corbeille pour vous assurer que le courriel ne s'y soit pas perdu !)",
|
||||
'mailChangeOk' => "Votre adresse courriel a été changée avec succès.",
|
||||
'mailRevertOk' => "Votre demande de changement d'adresse courriel a été annulée/révoquée.",
|
||||
'passChangeOk' => "Votre mot de passe a été changé avec succès.",
|
||||
'deleteAccSent' => "Un courriel a été envoyé à %s avec le lien de confirmation.",
|
||||
'deleteOk' => "Votre compte a été supprimé avec succès. Nous espérons vous revoir bientôt !<br /><br /> Vous pouvez maintenant fermer cette fenêtre.",
|
||||
'createAccSent' => 'Un courriel vous a été envoyé à <b>%s</b>. Veuillez suivre les instructions qu\'il contient pour créer votre compte.<br /><br />Si vous ne recevez pas l\'email de vérification, <a href="?account=resend">cliquez ici</a> pour en envoyer un autre.</div>',
|
||||
'recovUserSent' => "Un courriel vous a été envoyé à <b>%s</b>. Veuillez suivre les instructions qu'il contient pour récupérer votre nom d'utilisateur.",
|
||||
'recovPassSent' => "Un courriel vous a été envoyé à <b>%s</b>. Veuillez suivre les instructions qu'il contient pour réinitialiser votre mot de passe."
|
||||
),
|
||||
'error' => array(
|
||||
'mailTokenUsed' => "Cette clé de changement d'adresse courriel a déjà été utilisée ou n'est pas valide. Visitez votre <a href=\"?account#personal\">page de paramètres du compte</a> pour réessayer.",
|
||||
'passTokenUsed' => "Cette clé de changement de mot de passe a déjà été utilisée ou n'est pas valide. Visitez votre <a href=\"?account#personal\">page de paramètres du compte</a> pour réessayer.",
|
||||
'passTokenLost' => "Aucun jeton n'a été fourni. Si vous avez reçu un lien de réinitialisation du mot de passe dans un courriel, merci de copier et coller l'URL entière (y compris le jeton à la fin) dans la barre d'adresse de votre navigateur.",
|
||||
'isRecovering' => "Ce compte est déjà en train d'être récupéré. Suivez les instruction dans l'email reçu ou attendez %s pour que le token expire.",
|
||||
'loginExceeded' => "Le nombre maximum de connections depuis cette IP a été dépassé. Essayez de nouevau dans %s.",
|
||||
'signupExceeded' => "Le nombre maximum d'inscriptions depuis cette IP a été dépassé. Essayez de nouveau dans %s.",
|
||||
// 'emailNotFound' => "L'address email que vous avez entrée n'est pas associée à un compte.<br /><br />Si vous avez oublié l'address email avec laquelle vous avez enregistré votre compteCFG_CONTACT_EMAIL pour obtenir de l'aide.",
|
||||
'emailNotFound' => "Cette adresse électronique n'a pas été trouvée dans notre système."
|
||||
)
|
||||
)
|
||||
),
|
||||
'user' => array(
|
||||
'notFound' => "Utilisateur \"%s\" non trouvé!",
|
||||
@@ -1241,7 +1320,7 @@ $lang = array(
|
||||
'floorN' => "Plancher %d"
|
||||
),
|
||||
'privileges' => array(
|
||||
'main' => "Sur AoWoW, vous pouvez accumuler de la <a href=\"?reputation\">réputation</a>. Le principal moyen d'en accumuler est d'avoir un score élevé pour vos commentaires.<br><br>Ainsi, la réputation est une vision sommaire de vos contributions à la communauté.<br><br>En amassant de la réputation, vous gagnez le respect de la communauté et vous obtiendrez certains privilèges. Vous pouvez en trouver la liste complète ci-dessous.",
|
||||
'main' => "Sur AoWoW, vous pouvez accumuler de la <a href=\"?reputation\">réputation</a>. Le principal moyen d'en accumuler est d'avoir un score élevé pour vos commentaires.<br /><br />Ainsi, la réputation est une vision sommaire de vos contributions à la communauté.<br /><br />En amassant de la réputation, vous gagnez le respect de la communauté et vous obtiendrez certains privilèges. Vous pouvez en trouver la liste complète ci-dessous.",
|
||||
'privilege' => "Privilège",
|
||||
'privileges' => "Privilèges",
|
||||
'requiredRep' => "Réputation Requise",
|
||||
|
||||
@@ -28,7 +28,7 @@ $lang = array(
|
||||
'numSQL' => "Количество SQL запросов",
|
||||
'timeSQL' => "Время выполнения SQL запросов",
|
||||
'noJScript' => '<b>Данный сайт активно использует технологию JavaScript.</b><br />Пожалуйста, <a href="https://www.google.com/support/adsense/bin/answer.py?answer=12654" target="_blank">Включите JavaScript</a> в вашем браузере.',
|
||||
'userProfiles' => "Ваши персонажи", // translate.google :x
|
||||
// 'userProfiles' => "Ваши персонажи", // translate.google :x
|
||||
'pageNotFound' => "Такое %s не существует.",
|
||||
'gender' => "Пол",
|
||||
'sex' => [null, "Мужчина", "Женщина"],
|
||||
@@ -40,12 +40,13 @@ $lang = array(
|
||||
'side' => "Сторона: ",
|
||||
'related' => "Дополнительная информация",
|
||||
'contribute' => "Добавить",
|
||||
// 'replyingTo' => "Ответ на комментарий от",
|
||||
// 'replyingTo' => "Ответ на комментарий от",
|
||||
'submit' => "Отправить",
|
||||
'save' => 'Сохранить',
|
||||
'cancel' => "Отмена",
|
||||
'rewards' => "Награды",
|
||||
'gains' => "Бонус",
|
||||
'login' => "[Login]",
|
||||
// 'login' => "[Login]",
|
||||
'forum' => "Форум",
|
||||
'siteRep' => "Репутация: ",
|
||||
'yourRepHistory'=> "История вашей репутации",
|
||||
@@ -132,6 +133,7 @@ $lang = array(
|
||||
'colon' => ": ",
|
||||
'dateFmtShort' => "Y-m-d",
|
||||
'dateFmtLong' => "Y-m-d в g:i A",
|
||||
'dateFmtUntil' => "j F Y г.",
|
||||
'timeAgo' => '%s назад',
|
||||
'nfSeparators' => [' ', ','],
|
||||
|
||||
@@ -900,7 +902,6 @@ $lang = array(
|
||||
"Менеджер изображений", "Менеджер видео", "API партнер", "Ожидающее"
|
||||
),
|
||||
// signIn
|
||||
'doSignIn' => "Войти в вашу учетную запись",
|
||||
'signIn' => "Вход",
|
||||
'user' => "Логин",
|
||||
'pass' => "Пароль",
|
||||
@@ -909,55 +910,133 @@ $lang = array(
|
||||
'forgotUser' => "Имя пользователя",
|
||||
'forgotPass' => "Пароль",
|
||||
'accCreate' => 'У вас еще нет учетной записи? <a href="?account=signup">Зарегистрируйтесь прямо сейчас!</a>',
|
||||
'resendMail' => "Вновь выслать верификационное письмо",
|
||||
'resendHint' => "Если вы зарегистрировались, но не получили проверочного письма, пожалуйста, введите ваш email адрес ниже и подтвердите отправку формы. (Пожалуйста, удостоверьтесь, что Вы проверили папку со спамом и/или корзину Вашего почтового сервиса)",
|
||||
|
||||
// recovery
|
||||
'recoverUser' => "Запрос имени пользователя",
|
||||
'recoverPass' => "Сброс пароля: Шаг %s из 2",
|
||||
'newPass' => "New Password",
|
||||
'tokenExpires' => "This token expires in %s.",
|
||||
'newPass' => "Новый пароль:",
|
||||
'confNewPass' => "Подтвердите новый пароль:",
|
||||
'passResetHint' => 'Если вы не знаете пароль от своей учетной записи, пожалуйста, посетите <a href="?account=forgot-password">страницу сброса пароля</a>.',
|
||||
// 'tokenExpires' => "This token expires in %s.",
|
||||
|
||||
// creation
|
||||
'register' => "Регистрация: Шаг %s из 2",
|
||||
'passConfirm' => "Повторите пароль",
|
||||
'passConfirm' => "Повторите пароль:",
|
||||
|
||||
// dashboard
|
||||
'ipAddress' => "[IP-Adress]: ",
|
||||
'lastIP' => "[last used IP]: ",
|
||||
// 'myAccount' => "[My Account]",
|
||||
// 'editAccount' => "[Simply use the forms below to update your account information]",
|
||||
// 'viewPubDesc' => '[View your Public Description in your <a href="?user=%s">Profile Page</a>]',
|
||||
'ipAddress' => "IP-Adress: ",
|
||||
'lastIP' => "last used IP: ",
|
||||
// 'myAccount' => "My Account",
|
||||
// 'editAccount' => "Используйте нижеприведённую форму, чтобы обновить информацию о вашей учетной записи.",
|
||||
// 'viewPubDesc' => 'View your Public Description in your <a href="?user=%s">Profile Page</a>',
|
||||
|
||||
// bans
|
||||
'accBanned' => "[This Account was closed]",
|
||||
'bannedBy' => "[Banned by]: ",
|
||||
'reason' => "[Reason]: ",
|
||||
'ends' => "[Ends on]: ",
|
||||
'permanent' => "[The ban is permanent]",
|
||||
'noReason' => "[No reason was given.]",
|
||||
'accBanned' => "This Account was closed",
|
||||
'bannedBy' => "Banned by: ",
|
||||
'reason' => "Reason: ",
|
||||
'ends' => "Ends on: ",
|
||||
'permanent' => "The ban is permanent",
|
||||
'noReason' => "No reason was given.",
|
||||
|
||||
// form-text
|
||||
'emailInvalid' => "Недопустимый адрес email.", // message_emailnotvalid
|
||||
'emailNotFound' => "The email address you entered is not associated with any account.<br><br>If you forgot the email you registered your account with email CFG_CONTACT_EMAIL for assistance.",
|
||||
'createAccSent' => "An email was sent to <b>%s</b>. Simply follow the instructions to create your account.",
|
||||
'recovUserSent' => "An email was sent to <b>%s</b>. Simply follow the instructions to recover your username.",
|
||||
'recovPassSent' => "An email was sent to <b>%s</b>. Simply follow the instructions to reset your password.",
|
||||
'accActivated' => 'Your account has been activated.<br>Proceed to <a href="?account=signin&token=%s">sign in</a>',
|
||||
'userNotFound' => "The username you entered does not exists.",
|
||||
'wrongPass' => "That password is not vaild.",
|
||||
// 'accInactive' => "That account has not yet been confirmed active.",
|
||||
'loginExceeded' => "The maximum number of logins from this IP has been exceeded. Please try again in %s.",
|
||||
'signupExceeded'=> "The maximum number of signups from this IP has been exceeded. Please try again in %s.",
|
||||
// 'accInactive' => "That account has not yet been confirmed active.",
|
||||
'errNameLength' => "Имя пользователя не должно быть короче 4 символов.", // message_usernamemin
|
||||
'errNameChars' => "Имя пользователя может содержать только буквы и цифры.", // message_usernamenotvalid
|
||||
'errPassLength' => "Ваш пароль должен состоять минимум из 6 знаков.", // message_passwordmin
|
||||
'passMismatch' => "The passwords you entered do not match.",
|
||||
'nameInUse' => "That username is already taken.",
|
||||
'nameInUse' => "That username is already in use.",
|
||||
'mailInUse' => "That email is already registered to an account.",
|
||||
'isRecovering' => "This account is already recovering. Follow the instructions in your email or wait %s for the token to expire.",
|
||||
'passCheckFail' => "Пароли не совпадают.", // message_passwordsdonotmatch
|
||||
'newPassDiff' => "Прежний и новый пароли не должны совпадать." // message_newpassdifferent
|
||||
'newPassDiff' => "Прежний и новый пароли не должны совпадать.", // message_newpassdifferent
|
||||
'newMailDiff' => "Прежний и новый e-mail адреса не должны совпадать.", // message_newemaildifferent
|
||||
|
||||
// settings
|
||||
'settings' => "Параметры учетной записи",
|
||||
'settingsNote' => "Используйте нижеприведённую форму, чтобы обновить информацию о вашей учетной записи.",
|
||||
'tabGeneral' => "Общее",
|
||||
'tabPersonal' => "Персональное",
|
||||
'tabCommunity' => "Сообщество",
|
||||
'tabPremium' => "Premium",
|
||||
'preferences' => "Предпочтения",
|
||||
'modelviewer' => "3D-просмотр",
|
||||
'mvNote' => "Модель персонажа по умолчанию:",
|
||||
'lists' => "Списки",
|
||||
'listsNote' => "Показывать ID в поддерживаемых списках",
|
||||
'announcements' => "Объявления",
|
||||
'annNote' => "Удаляет данные о закрытых объявлениях, после чего вы сможете их увидеть снова.",
|
||||
'purge' => "Сбросить",
|
||||
'curPass' => "Текущий пароль:",
|
||||
'globalLogout' => "Выйти на всех устройствах и/или браузерах ",
|
||||
'curEmail' => "Текущий адрес email:",
|
||||
'newEmail' => "Новый адрес email:",
|
||||
'userPage' => "Профиль пользователя",
|
||||
'publicDesc' => "Описание",
|
||||
'publicDescNote'=> 'Расскажите нам о себе и ваших персонажах из World of Warcraft. Все, что вы напишите, будет отображаться на <a href="?user=%s">страница пользователя</a>.',
|
||||
'forums' => "Форум",
|
||||
'signature' => "Подпись",
|
||||
'signatureNote' => "Этой подписью будут сопровождаться все сообщения, опубликованные вами на форумах сайта.",
|
||||
'usernameNote' => "Имя пользователя должно включать не менее 4 и не более 16 символов, и может быть изменено один раз в течение %s. Специальные символы не допускаются.",
|
||||
'curName' => "Текущее имя пользователя:",
|
||||
'newName' => "Новое имя пользователя:",
|
||||
'accDelete' => "Удалить учетную запись",
|
||||
'accDeleteNote' => 'Если вы хотите удалить свою учетную запись и все, связанные с ней персональные данные, перейдите на <a href="?account=delete" style="color:inherit; text-decoration:underline">страницу удаления учетной записи</a>.',
|
||||
'avatar' => "Аватар",
|
||||
'avatarNote' => "Аватар будет сопровождать все сообщения, опубликованные вами на форумах.",
|
||||
'avWowIcon' => "Значок из World of Warcraft",
|
||||
'avWowIconNote' => '<span class="q0">например, INV_Axe_54</span><br />Совет: Чтобы найти название значка, дважды щелкните большом значке, когда вы смотрите страницу с описанием <a href="?item=22632" target="_blank">предмета</a> или <a href="?spell=78634" target="_blank">заклинания</a>. Затем вставьте эту строку в документ.',
|
||||
'avIconName' => "Название иконки:",
|
||||
'none' => "Нет",
|
||||
'preview' => "Предварительный просмотр",
|
||||
'custom' => "Свой",
|
||||
'premiumStatus' => "Premium подписка",
|
||||
'status' => "Статус",
|
||||
'active' => "Активно",
|
||||
'inactive' => "Неактивно",
|
||||
'activeCD' => "Вы должны подождать до %s, чтобы снова изменить имя пользователя.",
|
||||
'updateMessage' => array(
|
||||
'general' => "Предпочтения обновлены.",
|
||||
'community' => "Описание и подпись успешно обновлены.",
|
||||
'personal' => "Письмо с подтверждением было отправлено на %s.",
|
||||
'username' => 'Имя пользователя изменено с %1$s на %2$s.',
|
||||
'avNotFound' => "Иконка не найдена.",
|
||||
'avSuccess' => "Аватар успешно обновлен. Поздравляем Вас!",
|
||||
'avNoChange' => "Не произошло никаких изменений.",
|
||||
'av1stUser' => "Аватар, выбранный Вами, уникален! /ура",
|
||||
'avNthUser' => "Примите во внимание, что такой значок уже используется %d пользователями."
|
||||
),
|
||||
'inputbox' => array(
|
||||
'head' => array(
|
||||
'success' => "Успешно",
|
||||
'error' => "Упс!",
|
||||
'register' => "Регистрация: Шаг %s из 2",
|
||||
'recoverUser' => "Запрос имени пользователя",
|
||||
'recoverPass' => "Сброс пароля: Шаг %s из 2",
|
||||
'resendMail' => "Вновь выслать верификационное письмо",
|
||||
'signin' => "Войти в вашу учетную запись"
|
||||
),
|
||||
'message' => array(
|
||||
'accActivated' => 'Ваша учетная запись была активирована.<br />Перейдите к <a href="?account=signin&key=%s">входу</a>',
|
||||
'resendMail' => "Если вы зарегистрировались, но не получили проверочного письма, пожалуйста, введите ваш email адрес ниже и подтвердите отправку формы. (Пожалуйста, удостоверьтесь, что Вы проверили папку со спамом и/или корзину Вашего почтового сервиса)",
|
||||
'mailChangeOk' => "Ваш адрес электронной почты был успешно изменен.",
|
||||
'mailRevertOk' => "Запрос на изменение адреса электронной почты был отменен/отозван.",
|
||||
'passChangeOk' => "Ваш пароль был успешно изменен.",
|
||||
'deleteAccSent' => "Письмо с подтверждением было отправлено на %s.",
|
||||
'deleteOk' => "Ваша учетная запись была успешно удалена. Надеемся увидеть вас снова!<br /><br /> Теперь вы можете закрыть это окно.",
|
||||
'createAccSent' => 'Письмо с инструкциями для активации учетной записи было отправлено на адрес <b>%s/b>. Следуйте инструкциям, для продолжения регистрации.<br /><br />Если вы не получили письмо для подтверждения, <a href="?account=resend">нажмите здесь</a>, чтобы отправить его повторно.</div>',
|
||||
'recovUserSent' => "Письмо с инструкциями для активации учетной записи было отправлено на адрес <b>%s/b>. Просто следуйте инструкциям для восстановления имени пользователя.",
|
||||
'recovPassSent' => "Письмо с инструкциями для активации учетной записи было отправлено на адрес <b>%s/b>. Просто следуйте инструкциям для сброса пароля."
|
||||
),
|
||||
'error' => array(
|
||||
'mailTokenUsed' => 'Этот ключ для смены email уже был использован или недействителен. Посетите вашу <a href="?account#personal">страницу настроек учетной записи</a>, чтобы попробовать снова.',
|
||||
'passTokenUsed' => 'Этот ключ для смены пароля уже был использован или недействителен. Посетите вашу <a href="?account#personal">страницу настроек учетной записи</a>, чтобы попробовать снова.',
|
||||
'passTokenLost' => "Ключ не был получен. Если вы сбросили пароль по ссылке из письма, отправленного на email, пожалуйста, скопируйте URL целиком и вставьте в адресную строку (включая ключ, указанный в конце ссылки).",
|
||||
'isRecovering' => "Эта учетная запись уже восстанавливается. Следуйте инструкциям в письме или дождитесь истечения срока действия токена через %s.",
|
||||
'loginExceeded' => "Достигнуто максимальное количество попыток входа с этого IP. Пожалуйста, попробуйте снова через %s.",
|
||||
'signupExceeded' => "Достигнуто максимальное количество регистраций с этого IP. Пожалуйста, попробуйте снова через %s.",
|
||||
// 'emailNotFound' => "The email address you entered is not associated with any account.<br /><br />If you forgot the email you registered your account with email CFG_CONTACT_EMAIL for assistance.",
|
||||
'emailNotFound' => "Этот адрес электронной почты не найден в нашей системе."
|
||||
)
|
||||
)
|
||||
),
|
||||
'user' => array(
|
||||
'notFound' => "Пользователь \"%s\" не найден!",
|
||||
@@ -1241,7 +1320,7 @@ $lang = array(
|
||||
'floorN' => "Уровень %d"
|
||||
),
|
||||
'privileges' => array(
|
||||
'main' => "Здесь на AoWoW вы можете зарабатывать <a href=\"?reputation\">репутацию</a>. Основной источник получения репутации — увеличение рейтинга ваших комментариев другими пользователями.<br><br>Репутация примерно измеряет количество вашего вклада в сообщество.<br><br>По мере того, как вы зарабатываете репутацию, вы получаете доверие сообщества и особые привилегии. Полный список привилегий расположен ниже.",
|
||||
'main' => "Здесь на AoWoW вы можете зарабатывать <a href=\"?reputation\">репутацию</a>. Основной источник получения репутации — увеличение рейтинга ваших комментариев другими пользователями.<br /><br />Репутация примерно измеряет количество вашего вклада в сообщество.<br /><br />По мере того, как вы зарабатываете репутацию, вы получаете доверие сообщества и особые привилегии. Полный список привилегий расположен ниже.",
|
||||
'privilege' => "Привилегия",
|
||||
'privileges' => "Привилегии",
|
||||
'requiredRep' => "Необходима репутация",
|
||||
|
||||
@@ -28,7 +28,7 @@ $lang = array(
|
||||
'numSQL' => "数据库查询次数",
|
||||
'timeSQL' => "数据库查询时间",
|
||||
'noJScript' => '<b>本站点基于JavaScript。</b><br />请在你的浏览器里<a href="https://www.google.com/support/adsense/bin/answer.py?answer=12654" target="_blank">启用JavaScript</a>。',
|
||||
'userProfiles' => "我的简介",
|
||||
// 'userProfiles' => "我的简介",
|
||||
'pageNotFound' => "%s不存在。",
|
||||
'gender' => "性别",
|
||||
'sex' => [null, "男性", "女性"],
|
||||
@@ -40,12 +40,13 @@ $lang = array(
|
||||
'side' => "阵营:",
|
||||
'related' => "相关",
|
||||
'contribute' => "贡献",
|
||||
// 'replyingTo' => "The answer to a comment from",
|
||||
// 'replyingTo' => "The answer to a comment from",
|
||||
'submit' => "提交",
|
||||
'save' => '保存',
|
||||
'cancel' => "取消",
|
||||
'rewards' => "奖励",
|
||||
'gains' => "获得",
|
||||
'login' => "登录",
|
||||
// 'login' => "登录",
|
||||
'forum' => "论坛",
|
||||
'siteRep' => "站点声望:",
|
||||
'yourRepHistory'=> "您的声望历史",
|
||||
@@ -132,6 +133,7 @@ $lang = array(
|
||||
'colon' => ':',
|
||||
'dateFmtShort' => "Y/m/d",
|
||||
'dateFmtLong' => "Y/m/d \a\\t g:i A",
|
||||
'dateFmtUntil' => "Y年n月j日",
|
||||
'timeAgo' => '%s之前',
|
||||
'nfSeparators' => [',', '.'],
|
||||
|
||||
@@ -892,7 +894,7 @@ $lang = array(
|
||||
),
|
||||
'account' => array(
|
||||
'title' => "数据库账号",
|
||||
'email' => "电子邮箱地址",
|
||||
'email' => "邮箱地址",
|
||||
'continue' => "继续",
|
||||
'groups' => array(
|
||||
-1 => "无", "测试员", "管理员", "编辑器", "管理员", "官僚",
|
||||
@@ -900,7 +902,6 @@ $lang = array(
|
||||
"截屏管理器", "视频管理员", "API伙伴", "等待中"
|
||||
),
|
||||
// signIn
|
||||
'doSignIn' => "登录你的数据库账号",
|
||||
'signIn' => "登录",
|
||||
'user' => "用户名",
|
||||
'pass' => "密码",
|
||||
@@ -909,25 +910,22 @@ $lang = array(
|
||||
'forgotUser' => "用户名",
|
||||
'forgotPass' => "密码",
|
||||
'accCreate' => '没有账号?<a href="?account=signup">现在创建一个!</a>',
|
||||
'resendMail' => "重新发送验证邮件",
|
||||
'resendHint' => "[If you registered but did not receive a verification email, enter your email address below and submit the form. (Please be sure to check your spam or trash folders to make sure the email didn't accidentally get put in the wrong place!)]",
|
||||
|
||||
// recovery
|
||||
'recoverUser' => "用户名需求",
|
||||
'recoverPass' => "密码重置:步骤 %s / 2",
|
||||
'newPass' => "新密码",
|
||||
'tokenExpires' => "此令牌将在%s过期。",
|
||||
'newPass' => "新密码:",
|
||||
'confNewPass' => "确认密码:",
|
||||
'passResetHint' => '如果您忘记了当前密码,请访问 <a href="?account=forgot-password">密码重置页面</a> 进行重置。',
|
||||
// 'tokenExpires' => "此令牌将在%s过期。",
|
||||
|
||||
// creation
|
||||
'register' => "注册 - 步骤 %s / 2",
|
||||
'passConfirm' => "确认密码",
|
||||
'passConfirm' => "确认密码:",
|
||||
|
||||
// dashboard
|
||||
'ipAddress' => "IP地址:",
|
||||
'lastIP' => "上次使用IP地址:",
|
||||
// 'myAccount' => "我的账号",
|
||||
// 'editAccount' => "只需使用以下表格就能更新你的帐户信息",
|
||||
// 'viewPubDesc' => '在你的<a href="?user=%s">简介页面</a>查看你公共描述',
|
||||
// 'myAccount' => "我的账号",
|
||||
// 'editAccount' => "只需使用以下表格就能更新你的帐户信息",
|
||||
// 'viewPubDesc' => '在你的<a href="?user=%s">简介页面</a>查看你公共描述',
|
||||
|
||||
// bans
|
||||
'accBanned' => "这个账号已被关闭",
|
||||
@@ -939,25 +937,106 @@ $lang = array(
|
||||
|
||||
// form-text
|
||||
'emailInvalid' => "该电子邮件地址无效。", // message_emailnotvalid
|
||||
'emailNotFound' => "你输入的电子邮件地址与任何帐户不关联。<br><br>如果您忘记了使用哪个电子邮件注册了您的帐户,请发送电子邮件至CFG_CONTACT_EMAIL寻求帮助。",
|
||||
'createAccSent' => "电子邮件发送到<b>%s</b>。只需按照说明创建你的帐户。",
|
||||
'recovUserSent' => "电子邮件发送到<b>%s</b>。只需按照说明恢复你的用户名。",
|
||||
'recovPassSent' => "电子邮件发送到<b>%s</b>。只需按照说明重置你的密码。",
|
||||
'accActivated' => '你的帐户已被激活。<br>继续<a href="?account=signin&token=%s">登录</a>',
|
||||
'userNotFound' => "输入的用户名不存在。",
|
||||
'wrongPass' => "密码无效。",
|
||||
// 'accInactive' => "该帐户尚未确认激活。",
|
||||
'loginExceeded' => "这个IP最大登录次数已超过。请在%s后再次尝试。",
|
||||
'signupExceeded'=> "这个IP最大注册次数已超过。请在%s后再次尝试。",
|
||||
// 'accInactive' => "该帐户尚未确认激活。",
|
||||
'errNameLength' => "你的用户名必须至少4个字符长度。", // message_usernamemin
|
||||
'errNameChars' => "你的用户名只能包含字母和数字。", // message_usernamenotvalid
|
||||
'errPassLength' => "你的密码必须至少6个字符长度。", // message_passwordmin
|
||||
'passMismatch' => "你输入的密码不匹配。",
|
||||
'nameInUse' => "用户名已被占用。",
|
||||
'mailInUse' => "该电子邮件已注册到一个帐户。",
|
||||
'isRecovering' => "此帐户已恢复。按照电子邮件中的说明或等待%s后令牌过期。",
|
||||
'passCheckFail' => "密码不匹配。", // message_passwordsdonotmatch
|
||||
'newPassDiff' => "你的新密码必须与以前的密码不同。" // message_newpassdifferent
|
||||
'newPassDiff' => "你的新密码必须与以前的密码不同。", // message_newpassdifferent
|
||||
'newMailDiff' => "您的新邮箱地址必须不同于旧地址。", // message_newemaildifferent
|
||||
|
||||
// settings
|
||||
'settings' => "账号设置",
|
||||
'settingsNote' => "使用下列表格就能升级您的账号信息。",
|
||||
'tabGeneral' => "常规",
|
||||
'tabPersonal' => "个人",
|
||||
'tabCommunity' => "社区",
|
||||
'tabPremium' => "高级会员",
|
||||
'preferences' => "偏好",
|
||||
'modelviewer' => "模型查看器",
|
||||
'mvNote' => "默认角色模型:",
|
||||
'lists' => "清单",
|
||||
'listsNote' => "在支持的清单中显示ID",
|
||||
'announcements' => "公告",
|
||||
'annNote' => "清空您已关闭的公告数据,以便日后再次浏览。",
|
||||
'purge' => "清除",
|
||||
'curPass' => "当前密码:",
|
||||
'globalLogout' => "从所有其他浏览器/设备中登出当前账户",
|
||||
'curEmail' => "当前邮箱地址:",
|
||||
'newEmail' => "新邮箱地址:",
|
||||
'userPage' => "用户页",
|
||||
'publicDesc' => "公开描述",
|
||||
'publicDescNote'=> '跟我们说说您自己和您的 WoW 角色吧。您输入的信息会显示在您的 <a href="?user=%s">用户页</a> 上。',
|
||||
'forums' => "论坛",
|
||||
'signature' => "签名",
|
||||
'signatureNote' => "签名显示在论坛发帖的下方。",
|
||||
'usernameNote' => "用户名每%s只能更改一次,长度需为4-16个字符,不允许特殊字符。",
|
||||
'curName' => "当前用户名:",
|
||||
'newName' => "新用户名:",
|
||||
'accDelete' => "删除账户",
|
||||
'accDeleteNote' => '如果您想彻底删除您的账户以及所有个人信息,请访问我们的 <a href="?account=delete" style="color:inherit; text-decoration:underline">账户删除页面</a>。',
|
||||
'avatar' => "人物",
|
||||
'avatarNote' => "您的头像将显示在您所有论坛帖子的旁边。",
|
||||
'avWowIcon' => "魔兽世界图标",
|
||||
'avWowIconNote' => '<span class="q0">如INV_Axe_54</span><br />小建议:要找到图标的名字,只要在浏览<a href="?item=22632" target="_blank">图标</a> 或 <a href="?spell=78634" target="_blank">spell</a> 页面时 双击大图标,接着复制粘贴到上面。',
|
||||
'avIconName' => "图标名:",
|
||||
'none' => "无",
|
||||
'preview' => "预览",
|
||||
'custom' => "自定义",
|
||||
'premiumStatus' => "高级会员订阅",
|
||||
'status' => "状态",
|
||||
'active' => "激活",
|
||||
'inactive' => "未激活",
|
||||
'activeCD' => "您必须等到%s后才能再次更改用户名。",
|
||||
'updateMessage' => array(
|
||||
'general' => "已更新您的偏好设置。",
|
||||
'community' => "已成功更新您的公开描述与论坛签名。",
|
||||
'personal' => "确认邮件已发送到 %s。",
|
||||
'username' => '用户名已从 %1$s 更改为 %2$s。',
|
||||
'avNotFound' => "图标未找到",
|
||||
'avSuccess' => "您的头像更新成功。",
|
||||
'avNoChange' => "没有做过改变",
|
||||
'av1stUser' => "恭喜选到了最独特的那一个! /干杯",
|
||||
'avNthUser' => "提示,您的图标也被%d其他用户使用。"
|
||||
),
|
||||
'inputbox' => array(
|
||||
'head' => array(
|
||||
'success' => "成功",
|
||||
'error' => "哦嚯!",
|
||||
'register' => "注册 - 步骤 %s / 2",
|
||||
'recoverUser' => "用户名需求",
|
||||
'recoverPass' => "密码重置:步骤 %s / 2",
|
||||
'resendMail' => "重新发送验证邮件",
|
||||
'signin' => "登录你的数据库账号"
|
||||
),
|
||||
'message' => array(
|
||||
'accActivated' => '你的帐户已被激活。<br />继续<a href="?account=signin&key=%s">登录</a>',
|
||||
'resendMail' => "如果您已注册但未收到验证邮件,请在下方输入您的邮箱地址并提交表单。(请务必检查您的垃圾邮件或回收站文件夹,以确保邮件没有被误放到错误的位置!)",
|
||||
'mailChangeOk' => "您的邮箱地址已成功更改。",
|
||||
'mailRevertOk' => "您的邮箱更改请求已被取消/撤销。",
|
||||
'passChangeOk' => "您的密码已成功更改。",
|
||||
'deleteAccSent' => "已向 %s 发送了一封带有确认链接的邮件。",
|
||||
'deleteOk' => "您的账户已成功删除。希望不久后能再次见到您!<br /><br />您现在可以关闭此窗口。",
|
||||
'createAccSent' => '电子邮件发送到<b>%s</b>。只请按照说明创建您的账户。<br /><br />如果您没有收到验证邮件,<a href="?account=resend">点击这里</a>重新发送。',
|
||||
'recovUserSent' => "电子邮件发送到<b>%s</b>。只请按照说明恢复您的用户名。",
|
||||
'recovPassSent' => "电子邮件发送到<b>%s</b>。只请按照说明重置您的密码。"
|
||||
),
|
||||
'error' => array(
|
||||
'mailTokenUsed' => '该邮箱更改密钥已被使用,或不是有效密钥。请访问您的<a href="?account#personal">账户设置页面</a>重新尝试。',
|
||||
'passTokenUsed' => '该密码更改密钥已被使用,或不是有效密钥。请访问您的<a href="?account#personal">账户设置页面</a>重新尝试。',
|
||||
'passTokenLost' => "未提供令牌。如果您在邮件中收到重置密码链接,请将整个网址(包括最后的令牌)复制并粘贴到浏览器地址栏中。",
|
||||
'isRecovering' => "此帐户已恢复。按照电子邮件中的说明或等待%s后令牌过期。",
|
||||
'loginExceeded' => "这个IP最大登录次数已超过。请在%s后再次尝试。",
|
||||
'signupExceeded' => "这个IP最大注册次数已超过。请在%s后再次尝试。",
|
||||
// 'emailNotFound' => "你输入的电子邮件地址与任何帐户不关联。<br /><br />如果您忘记了使用哪个电子邮件注册了您的帐户,请发送电子邮件至CFG_CONTACT_EMAIL寻求帮助。",
|
||||
'emailNotFound' => "未在我们的系统中找到该电子邮件地址。"
|
||||
)
|
||||
)
|
||||
),
|
||||
'user' => array(
|
||||
'notFound' => "用户 \"%s\" 未找到",
|
||||
@@ -1241,7 +1320,7 @@ $lang = array(
|
||||
'floorN' => "[Level %d]"
|
||||
),
|
||||
'privileges' => array(
|
||||
'main' => "在我们的网站上,你可以通过 <a href=\"?reputation\">声望</a>. 来获取特权。获取声望的主要途径是获得评论的赞同。<br><br>因此,声望是衡量你对社区的贡献程度的一个大致指标。<br><br>随着声望的积累,你将获得社区的信任,并被赋予额外的特权。以下是完整的特权列表。",
|
||||
'main' => "在我们的网站上,你可以通过 <a href=\"?reputation\">声望</a>. 来获取特权。获取声望的主要途径是获得评论的赞同。<br /><br />因此,声望是衡量你对社区的贡献程度的一个大致指标。<br /><br />随着声望的积累,你将获得社区的信任,并被赋予额外的特权。以下是完整的特权列表。",
|
||||
'privilege' => "特权",
|
||||
'privileges' => "特权",
|
||||
'requiredRep' => "需要声望",
|
||||
|
||||
@@ -1,465 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Aowow;
|
||||
|
||||
if (!defined('AOWOW_REVISION'))
|
||||
die('illegal access');
|
||||
|
||||
|
||||
// exclude & weightscales are handled as Ajax
|
||||
class AccountPage extends GenericPage
|
||||
{
|
||||
protected $text = '';
|
||||
protected $head = '';
|
||||
protected $token = '';
|
||||
protected $infobox = [];
|
||||
protected $resetPass = false;
|
||||
protected $forceTabs = false;
|
||||
|
||||
protected $tpl = 'acc-dashboard';
|
||||
protected $scripts = array(
|
||||
[SC_JS_FILE, 'js/user.js'],
|
||||
[SC_JS_FILE, 'js/profile.js'],
|
||||
[SC_CSS_FILE, 'css/Profiler.css']
|
||||
);
|
||||
protected $mode = CACHE_TYPE_NONE;
|
||||
protected $category = null;
|
||||
protected $validCats = array(
|
||||
'signup' => [false],
|
||||
'forgotpassword' => [false],
|
||||
'forgotusername' => [false]
|
||||
);
|
||||
|
||||
protected $user = '';
|
||||
protected $error = '';
|
||||
protected $next = '';
|
||||
|
||||
protected $lvTabs = [];
|
||||
protected $banned = [];
|
||||
|
||||
protected $_get = array(
|
||||
'token' => ['filter' => FILTER_SANITIZE_SPECIAL_CHARS, 'flags' => FILTER_FLAG_STRIP_AOWOW],
|
||||
'next' => ['filter' => FILTER_SANITIZE_SPECIAL_CHARS, 'flags' => FILTER_FLAG_STRIP_AOWOW],
|
||||
);
|
||||
|
||||
protected $_post = array(
|
||||
'username' => ['filter' => FILTER_SANITIZE_SPECIAL_CHARS, 'flags' => FILTER_FLAG_STRIP_AOWOW],
|
||||
'password' => ['filter' => FILTER_CALLBACK, 'options' => 'Aowow\GenericPage::checkTextLine'],
|
||||
'c_password' => ['filter' => FILTER_CALLBACK, 'options' => 'Aowow\GenericPage::checkTextLine'],
|
||||
'token' => ['filter' => FILTER_SANITIZE_SPECIAL_CHARS, 'flags' => FILTER_FLAG_STRIP_AOWOW],
|
||||
'remember_me' => ['filter' => FILTER_CALLBACK, 'options' => 'Aowow\AccountPage::rememberCallback'],
|
||||
'email' => ['filter' => FILTER_SANITIZE_EMAIL]
|
||||
);
|
||||
|
||||
public function __construct($pageCall, $pageParam)
|
||||
{
|
||||
if ($pageParam)
|
||||
$this->category = [$pageParam];
|
||||
|
||||
parent::__construct($pageCall, $pageParam);
|
||||
|
||||
if ($pageParam)
|
||||
{
|
||||
// requires auth && not authed
|
||||
if ($this->validCats[$pageParam][0] && !User::isLoggedIn())
|
||||
$this->forwardToSignIn('account='.$pageParam);
|
||||
// doesn't require auth && authed
|
||||
else if (!$this->validCats[$pageParam][0] && User::isLoggedIn())
|
||||
header('Location: ?account', true, 302); // goto dashboard
|
||||
}
|
||||
}
|
||||
|
||||
protected static function rememberCallback($val)
|
||||
{
|
||||
return $val == 'yes' ? $val : null;
|
||||
}
|
||||
|
||||
protected function generateContent()
|
||||
{
|
||||
if (!$this->category)
|
||||
{
|
||||
$this->createDashboard();
|
||||
return;
|
||||
}
|
||||
|
||||
switch ($this->category[0])
|
||||
{
|
||||
case 'forgotpassword':
|
||||
if (Cfg::get('ACC_AUTH_MODE') != AUTH_MODE_SELF)
|
||||
{
|
||||
if (Cfg::get('ACC_EXT_RECOVER_URL'))
|
||||
header('Location: '.Cfg::get('ACC_EXT_RECOVER_URL'), true, 302);
|
||||
else
|
||||
$this->error();
|
||||
}
|
||||
|
||||
$this->tpl = 'acc-recover';
|
||||
$this->resetPass = false;
|
||||
|
||||
if ($this->createRecoverPass($nStep)) // location-header after final step
|
||||
header('Location: ?account=signin', true, 302);
|
||||
|
||||
$this->head = sprintf(Lang::account('recoverPass'), $nStep);
|
||||
break;
|
||||
case 'forgotusername':
|
||||
if (Cfg::get('ACC_AUTH_MODE') != AUTH_MODE_SELF)
|
||||
{
|
||||
if (Cfg::get('ACC_EXT_RECOVER_URL'))
|
||||
header('Location: '.Cfg::get('ACC_EXT_RECOVER_URL'), true, 302);
|
||||
else
|
||||
$this->error();
|
||||
}
|
||||
|
||||
$this->tpl = 'acc-recover';
|
||||
$this->resetPass = false;
|
||||
|
||||
if ($this->_post['email'])
|
||||
{
|
||||
if (!Util::isValidEmail($this->_post['email']))
|
||||
$this->error = Lang::account('emailInvalid');
|
||||
else if (!DB::Aowow()->selectCell('SELECT 1 FROM ?_account WHERE email = ?', $this->_post['email']))
|
||||
$this->error = Lang::account('emailNotFound');
|
||||
else if ($err = $this->doRecoverUser())
|
||||
$this->error = $err;
|
||||
else
|
||||
$this->text = sprintf(Lang::account('recovUserSent'). $this->_post['email']);
|
||||
}
|
||||
|
||||
$this->head = Lang::account('recoverUser');
|
||||
break;
|
||||
case 'signup':
|
||||
if (!Cfg::get('ACC_ALLOW_REGISTER'))
|
||||
$this->error();
|
||||
|
||||
if (Cfg::get('ACC_AUTH_MODE') != AUTH_MODE_SELF)
|
||||
{
|
||||
if (Cfg::get('ACC_EXT_CREATE_URL'))
|
||||
header('Location: '.Cfg::get('ACC_EXT_CREATE_URL'), true, 302);
|
||||
else
|
||||
$this->error();
|
||||
}
|
||||
|
||||
$this->tpl = 'acc-signUp';
|
||||
$nStep = 1;
|
||||
if ($this->_post['username'] || $this->_post['password'] || $this->_post['c_password'] || $this->_post['email'])
|
||||
{
|
||||
if ($err = $this->doSignUp())
|
||||
$this->error = $err;
|
||||
else
|
||||
{
|
||||
$nStep = 1.5;
|
||||
$this->text = sprintf(Lang::account('createAccSent'), $this->_post['email']);
|
||||
}
|
||||
}
|
||||
else if ($this->_get['token'] && ($newId = DB::Aowow()->selectCell('SELECT id FROM ?_account WHERE status = ?d AND token = ?', ACC_STATUS_NEW, $this->_get['token'])))
|
||||
{
|
||||
$nStep = 2;
|
||||
DB::Aowow()->query('UPDATE ?_account SET status = ?d, statusTimer = 0, token = 0, userGroups = ?d WHERE token = ?', ACC_STATUS_OK, U_GROUP_NONE, $this->_get['token']);
|
||||
DB::Aowow()->query('REPLACE INTO ?_account_bannedips (ip, type, count, unbanDate) VALUES (?, 1, ?d + 1, UNIX_TIMESTAMP() + ?d)', User::$ip, Cfg::get('ACC_FAILED_AUTH_COUNT'), Cfg::get('ACC_FAILED_AUTH_BLOCK'));
|
||||
|
||||
$this->text = sprintf(Lang::account('accActivated'), $this->_get['token']);
|
||||
}
|
||||
else
|
||||
$this->next = $this->getNext();
|
||||
|
||||
$this->head = sprintf(Lang::account('register'), $nStep);
|
||||
break;
|
||||
default:
|
||||
header('Location: '.$this->getNext(true), true, 302);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
protected function generateTitle()
|
||||
{
|
||||
$this->title = [Lang::account('title')];
|
||||
}
|
||||
|
||||
protected function generatePath() { }
|
||||
|
||||
private function createDashboard()
|
||||
{
|
||||
if (!User::isLoggedIn())
|
||||
$this->forwardToSignIn('account');
|
||||
|
||||
$user = DB::Aowow()->selectRow('SELECT * FROM ?_account WHERE `id` = ?d', User::$id);
|
||||
$bans = DB::Aowow()->select('SELECT ab.*, a.`username`, ab.`id` AS ARRAY_KEY FROM ?_account_banned ab LEFT JOIN ?_account a ON a.`id` = ab.`staffId` WHERE ab.`userId` = ?d', User::$id);
|
||||
|
||||
/***********/
|
||||
/* Infobox */
|
||||
/***********/
|
||||
|
||||
$infobox = [];
|
||||
$infobox[] = Lang::user('joinDate'). Lang::main('colon').'[tooltip name=joinDate]'. date('l, G:i:s', $user['joinDate']). '[/tooltip][span class=tip tooltip=joinDate]'. date(Lang::main('dateFmtShort'), $user['joinDate']). '[/span]';
|
||||
$infobox[] = Lang::user('lastLogin').Lang::main('colon').'[tooltip name=lastLogin]'.date('l, G:i:s', $user['prevLogin']).'[/tooltip][span class=tip tooltip=lastLogin]'.date(Lang::main('dateFmtShort'), $user['prevLogin']).'[/span]';
|
||||
$infobox[] = Lang::account('lastIP').Lang::main('colon').$user['prevIP'];
|
||||
$infobox[] = Lang::account('email'). Lang::main('colon').$user['email'];
|
||||
|
||||
$groups = [];
|
||||
foreach (Lang::account('groups') as $idx => $key)
|
||||
if ($idx >= 0 && $user['userGroups'] & (1 << $idx))
|
||||
$groups[] = (!fMod(count($groups) + 1, 3) ? '[br]' : null).Lang::account('groups', $idx);
|
||||
$infobox[] = Lang::user('userGroups').Lang::main('colon').($groups ? implode(', ', $groups) : Lang::account('groups', -1));
|
||||
$infobox[] = Util::ucFirst(Lang::main('siteRep')).Lang::main('colon').User::getReputation();
|
||||
|
||||
|
||||
$this->infobox = '[ul][li]'.implode('[/li][li]', $infobox).'[/li][/ul]';
|
||||
|
||||
/*************/
|
||||
/* Ban Popup */
|
||||
/*************/
|
||||
|
||||
foreach ($bans as $b)
|
||||
{
|
||||
if (!($b['typeMask'] & (ACC_BAN_TEMP | ACC_BAN_PERM)) || ($b['end'] && $b['end'] <= time()))
|
||||
continue;
|
||||
|
||||
$this->banned = array(
|
||||
'by' => [$b['staffId'], $b['username']],
|
||||
'end' => $b['end'],
|
||||
'reason' => $b['reason']
|
||||
);
|
||||
|
||||
break; // one is enough
|
||||
}
|
||||
|
||||
/************/
|
||||
/* Listview */
|
||||
/************/
|
||||
|
||||
$this->forceTabs = true;
|
||||
|
||||
// Reputation changelog (params only for comment-events)
|
||||
if ($repData = DB::Aowow()->select('SELECT action, amount, date AS \'when\', IF(action IN (3, 4, 5), sourceA, 0) AS param FROM ?_account_reputation WHERE userId = ?d', User::$id))
|
||||
{
|
||||
foreach ($repData as &$r)
|
||||
$r['when'] = date(Util::$dateFormatInternal, $r['when']);
|
||||
|
||||
$this->lvTabs[] = ['reputationhistory', ['data' => $repData]];
|
||||
}
|
||||
|
||||
// comments
|
||||
if ($_ = CommunityContent::getCommentPreviews(['user' => User::$id, 'comments' => true]))
|
||||
{
|
||||
// needs foundCount for params
|
||||
// _totalCount: 377,
|
||||
// note: $WH.sprintf(LANG.lvnote_usercomments, 377),
|
||||
|
||||
$this->lvTabs[] = ['commentpreview', array(
|
||||
'data' => $_,
|
||||
'hiddenCols' => ['author'],
|
||||
'onBeforeCreate' => '$Listview.funcBox.beforeUserComments'
|
||||
)];
|
||||
}
|
||||
|
||||
// replies
|
||||
if ($_ = CommunityContent::getCommentPreviews(['user' => User::$id, 'replies' => true]))
|
||||
{
|
||||
// needs commentid (parentComment) for data
|
||||
// needs foundCount for params
|
||||
// _totalCount: 377,
|
||||
// note: $WH.sprintf(LANG.lvnote_usercomments, 377),
|
||||
|
||||
$this->lvTabs[] = ['replypreview', array(
|
||||
'data' => $_,
|
||||
'hiddenCols' => ['author']
|
||||
)];
|
||||
}
|
||||
|
||||
/*
|
||||
<div id="description" class="left"><div id="description-generic"></div>
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
Markup.printHtml("description text here", "description-generic", { allow: Markup.CLASS_PREMIUM, roles: "256" });
|
||||
//]]></script>
|
||||
|
||||
</div>
|
||||
<script type="text/javascript">us_addDescription()</script>
|
||||
|
||||
*/
|
||||
// claimed characters
|
||||
// profiles
|
||||
// own screenshots
|
||||
// own videos
|
||||
// own comments (preview)
|
||||
// articles guides..?
|
||||
|
||||
|
||||
// cpmsg change pass messaeg class:failure|success, msg:blabla
|
||||
}
|
||||
|
||||
private function createRecoverPass(&$step)
|
||||
{
|
||||
$step = 1;
|
||||
|
||||
if ($this->_post['email']) // step 1
|
||||
{
|
||||
if (!Util::isValidEmail($this->_post['email']))
|
||||
$this->error = Lang::account('emailInvalid');
|
||||
else if (!DB::Aowow()->selectCell('SELECT 1 FROM ?_account WHERE email = ?', $this->_post['email']))
|
||||
$this->error = Lang::account('emailNotFound');
|
||||
else if ($err = $this->doRecoverPass())
|
||||
$this->error = $err;
|
||||
else
|
||||
{
|
||||
$step = 1.5;
|
||||
$this->text = sprintf(Lang::account('recovPassSent'), $this->_post['email']);
|
||||
}
|
||||
}
|
||||
else if ($this->_get['token']) // step 2
|
||||
{
|
||||
$step = 2;
|
||||
$this->resetPass = true;
|
||||
$this->token = $this->_get['token'];
|
||||
}
|
||||
else if ($this->_post['token'] && $this->_post['email'] && $this->_post['password'] && $this->_post['c_password'])
|
||||
{
|
||||
$step = 2;
|
||||
$this->resetPass = true;
|
||||
$this->token = $this->_post['token']; // insecure source .. that sucks; but whats the worst that could happen .. this account cannot be recovered for some minutes
|
||||
|
||||
if ($err = $this->doResetPass())
|
||||
$this->error = $err;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private function doSignUp()
|
||||
{
|
||||
// check username
|
||||
if (!User::isValidName($this->_post['username'], $e))
|
||||
return Lang::account($e == 1 ? 'errNameLength' : 'errNameChars');
|
||||
|
||||
// check password
|
||||
if (!User::isValidPass($this->_post['password'], $e))
|
||||
return Lang::account($e == 1 ? 'errPassLength' : 'errPassChars');
|
||||
|
||||
if ($this->_post['password'] != $this->_post['c_password'])
|
||||
return Lang::account('passMismatch');
|
||||
|
||||
// check email
|
||||
if (!Util::isValidEmail($this->_post['email']))
|
||||
return Lang::account('emailInvalid');
|
||||
|
||||
// check ip
|
||||
if (!User::$ip)
|
||||
return Lang::main('intError');
|
||||
|
||||
// limit account creation
|
||||
$ip = DB::Aowow()->selectRow('SELECT `ip`, `count`, `unbanDate` FROM ?_account_bannedips WHERE `type` = 1 AND `ip` = ?', User::$ip);
|
||||
if ($ip && $ip['count'] >= Cfg::get('ACC_FAILED_AUTH_COUNT') && $ip['unbanDate'] >= time())
|
||||
{
|
||||
DB::Aowow()->query('UPDATE ?_account_bannedips SET `count` = `count` + 1, `unbanDate` = UNIX_TIMESTAMP() + ?d WHERE `ip` = ? AND `type` = 1', Cfg::get('ACC_FAILED_AUTH_BLOCK'), User::$ip);
|
||||
return sprintf(Lang::account('signupExceeded'), Util::formatTime(Cfg::get('ACC_FAILED_AUTH_BLOCK') * 1000));
|
||||
}
|
||||
|
||||
// username taken
|
||||
if ($_ = DB::Aowow()->SelectCell('SELECT `username` FROM ?_account WHERE (`username` = ? OR `email` = ?) AND (`status` <> ?d OR (`status` = ?d AND `statusTimer` > UNIX_TIMESTAMP()))', $this->_post['username'], $this->_post['email'], ACC_STATUS_NEW, ACC_STATUS_NEW))
|
||||
return $_ == $this->_post['username'] ? Lang::account('nameInUse') : Lang::account('mailInUse');
|
||||
|
||||
// create..
|
||||
$token = Util::createHash();
|
||||
$ok = DB::Aowow()->query('REPLACE INTO ?_account (`login`, `passHash`, `username`, `email`, `joindate`, `curIP`, `locale`, `userGroups`, `status`, `statusTimer`, `token`) VALUES (?, ?, ?, ?, UNIX_TIMESTAMP(), ?, ?d, ?d, ?d, ?d, UNIX_TIMESTAMP() + ?d, ?)',
|
||||
$this->_post['username'],
|
||||
User::hashCrypt($this->_post['password']),
|
||||
$this->_post['username'],
|
||||
$this->_post['email'],
|
||||
User::$ip,
|
||||
Lang::getLocale()->value,
|
||||
U_GROUP_PENDING,
|
||||
ACC_STATUS_NEW,
|
||||
Cfg::get('ACC_CREATE_SAVE_DECAY'),
|
||||
$token
|
||||
);
|
||||
if (!$ok)
|
||||
return Lang::main('intError');
|
||||
|
||||
if (!Util::sendMail($this->_post['email'], 'activate-account', [$token], Cfg::get('ACC_RECOVERY_DECAY')))
|
||||
return Lang::main('intError2', ['send mail']);
|
||||
|
||||
if ($id = DB::Aowow()->selectCell('SELECT id FROM ?_account WHERE token = ?', $token))
|
||||
Util::gainSiteReputation($id, SITEREP_ACTION_REGISTER);
|
||||
|
||||
// success:: update ip-bans
|
||||
if (!$ip || $ip['unbanDate'] < time())
|
||||
DB::Aowow()->query('REPLACE INTO ?_account_bannedips (ip, type, count, unbanDate) VALUES (?, 1, 1, UNIX_TIMESTAMP() + ?d)', User::$ip, Cfg::get('ACC_FAILED_AUTH_BLOCK'));
|
||||
else
|
||||
DB::Aowow()->query('UPDATE ?_account_bannedips SET count = count + 1, unbanDate = UNIX_TIMESTAMP() + ?d WHERE ip = ? AND type = 1', Cfg::get('ACC_FAILED_AUTH_BLOCK'), User::$ip);
|
||||
}
|
||||
|
||||
private function doRecoverPass()
|
||||
{
|
||||
if ($_ = $this->initRecovery(ACC_STATUS_RECOVER_PASS, Cfg::get('ACC_RECOVERY_DECAY'), $token))
|
||||
return $_;
|
||||
|
||||
// send recovery mail
|
||||
if (!Util::sendMail($this->_post['email'], 'reset-password', [$token], Cfg::get('ACC_RECOVERY_DECAY')))
|
||||
return Lang::main('intError2', ['send mail']);
|
||||
}
|
||||
|
||||
private function doResetPass()
|
||||
{
|
||||
if ($this->_post['password'] != $this->_post['c_password'])
|
||||
return Lang::account('passCheckFail');
|
||||
|
||||
if (!Util::isValidEmail($this->_post['email']))
|
||||
return Lang::account('emailInvalid');
|
||||
|
||||
$userData = DB::Aowow()->selectRow('SELECT `id, `passHash` FROM ?_account WHERE `token` = ? AND `email` = ? AND `status` = ?d AND `statusTimer` > UNIX_TIMESTAMP()',
|
||||
$this->_post['token'],
|
||||
$this->_post['email'],
|
||||
ACC_STATUS_RECOVER_PASS
|
||||
);
|
||||
if (!$userData)
|
||||
return Lang::account('emailNotFound'); // assume they didn't meddle with the token
|
||||
|
||||
if (!User::verifyCrypt($this->_post['c_password'], $userData['passHash']))
|
||||
return Lang::account('newPassDiff');
|
||||
|
||||
if (!DB::Aowow()->query('UPDATE ?_account SET `passHash` = ?, `status` = ?d WHERE `id` = ?d', User::hashCrypt($this->_post['c_password']), ACC_STATUS_OK, $userData['id']))
|
||||
return Lang::main('intError');
|
||||
}
|
||||
|
||||
private function doRecoverUser()
|
||||
{
|
||||
if ($_ = $this->initRecovery(ACC_STATUS_RECOVER_USER, Cfg::get('ACC_RECOVERY_DECAY'), $token))
|
||||
return $_;
|
||||
|
||||
if (!Util::sendMail($this->_post['email'], 'recover-user', [$token], Cfg::get('ACC_RECOVERY_DECAY')))
|
||||
return Lang::main('intError2', ['send mail']);
|
||||
}
|
||||
|
||||
private function initRecovery($type, $delay, &$token)
|
||||
{
|
||||
if (!$type)
|
||||
return Lang::main('intError');
|
||||
|
||||
// check if already processing
|
||||
if ($_ = DB::Aowow()->selectCell('SELECT statusTimer - UNIX_TIMESTAMP() FROM ?_account WHERE email = ? AND status <> ?d AND statusTimer > UNIX_TIMESTAMP()', $this->_post['email'], ACC_STATUS_OK))
|
||||
return sprintf(Lang::account('isRecovering'), Util::formatTime($_ * 1000));
|
||||
|
||||
// create new token and write to db
|
||||
$token = Util::createHash();
|
||||
if (!DB::Aowow()->query('UPDATE ?_account SET token = ?, status = ?d, statusTimer = UNIX_TIMESTAMP() + ?d WHERE email = ?', $token, $type, $delay, $this->_post['email']))
|
||||
return Lang::main('intError');
|
||||
}
|
||||
|
||||
private function getNext($forHeader = false)
|
||||
{
|
||||
$next = $forHeader ? '.' : '';
|
||||
if ($this->_get['next'])
|
||||
$next = $this->_get['next'];
|
||||
else if (isset($_SERVER['HTTP_REFERER']) && strstr($_SERVER['HTTP_REFERER'], '?'))
|
||||
$next = explode('?', $_SERVER['HTTP_REFERER'])[1];
|
||||
|
||||
if ($forHeader && !$next)
|
||||
$next = '.';
|
||||
|
||||
return ($forHeader && $next != '.' ? '?' : '').$next;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
3
setup/updates/1758578400_11.sql
Normal file
3
setup/updates/1758578400_11.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE `aowow_account`
|
||||
ADD COLUMN `debug` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'show ids in lists user option' AFTER `userGroups`,
|
||||
MODIFY COLUMN `description` text NOT NULL DEFAULT '';
|
||||
11
setup/updates/1758578400_12.sql
Normal file
11
setup/updates/1758578400_12.sql
Normal file
@@ -0,0 +1,11 @@
|
||||
ALTER TABLE `aowow_user_ratings`
|
||||
DROP KEY `FK_acc_co_rate_user`,
|
||||
DROP FOREIGN KEY `FK_userId`,
|
||||
DROP PRIMARY KEY;
|
||||
|
||||
ALTER TABLE `aowow_user_ratings` MODIFY `userId` int unsigned NULL;
|
||||
|
||||
ALTER TABLE `aowow_user_ratings`
|
||||
ADD UNIQUE KEY (`type`,`entry`,`userId`),
|
||||
ADD KEY `FK_acc_co_rate_user` (`userId`),
|
||||
ADD CONSTRAINT FK_userId FOREIGN KEY (`userId`) REFERENCES aowow_account(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
@@ -502,6 +502,15 @@ a.premium-user-badge {
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
/* aowow - imported for account page */
|
||||
.box {
|
||||
padding: 15px;
|
||||
background: #282828;
|
||||
border-radius: 6px;
|
||||
display: table;
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.reputation-negative-amount span { /* The whole text has the class; the number is spanned */
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
@@ -3202,7 +3211,7 @@ td.screenshot-cell:hover img {
|
||||
|
||||
.text h1 {
|
||||
color: white;
|
||||
font-size: 19px;
|
||||
font-size: 19px !important;
|
||||
font-weight: normal;
|
||||
border-bottom: 1px solid #505050;
|
||||
padding: 0 0 5px 0;
|
||||
|
||||
462
static/js/account.js
Normal file
462
static/js/account.js
Normal file
@@ -0,0 +1,462 @@
|
||||
function pm() {
|
||||
var pass1 = $('#newpass').val();
|
||||
var pass2 = $('#confirmpass').val();
|
||||
var
|
||||
bracket = '',
|
||||
buff = '';
|
||||
|
||||
if (pass1 != '' && $WH.trim(pass1).length < 6)
|
||||
buff = '<span class="q10">' + LANG.message_passwordmin + '</span>';
|
||||
|
||||
if (pass1 != '' && pass2 != '') {
|
||||
if (buff != '')
|
||||
buff += '<br />';
|
||||
|
||||
if (pass1 == pass2)
|
||||
buff += '<span class="q2">' + LANG.myaccount_passmatch + '</span>';
|
||||
else
|
||||
buff += '<span class="q10">' + LANG.myaccount_passdontmatch + '</span>';
|
||||
}
|
||||
|
||||
if (buff != '')
|
||||
bracket = '}';
|
||||
|
||||
$WH.ge('pm1').innerHTML = bracket;
|
||||
$WH.ge('pm2').innerHTML = buff;
|
||||
}
|
||||
|
||||
function spd(form) {
|
||||
var desc = form.elements.desc;
|
||||
if (desc.value.length == 0)
|
||||
return true;
|
||||
|
||||
if (desc.value.length < 10) {
|
||||
alert(LANG.message_descriptiontooshort);
|
||||
return false;
|
||||
}
|
||||
|
||||
var charLimit = Listview.funcBox.coGetCharLimit(2);
|
||||
if (desc.value.length > charLimit)
|
||||
if (!confirm($WH.sprintf(LANG.confirm_descriptiontoolong, charLimit, desc.value.substring(charLimit - 30, charLimit))))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function sfs(form) {
|
||||
var sig = form.elements.sig;
|
||||
sig.value = $WH.trim(sig.value);
|
||||
if (sig.value.length == 0)
|
||||
return true;
|
||||
|
||||
var charLimit = Listview.funcBox.coGetCharLimit(4);
|
||||
if (sig.value.length > charLimit)
|
||||
if (!confirm($WH.sprintf(LANG.confirm_signaturetoolong, charLimit, sig.value.substring(charLimit - 30, charLimit))))
|
||||
return false;
|
||||
|
||||
var nLines;
|
||||
if ((nLines = sig.value.indexOf("\n")) != -1 && (nLines = sig.value.indexOf("\n", nLines + 1)) != -1 && (nLines = sig.value.indexOf("\n", nLines + 1)) != -1)
|
||||
if (!confirm($WH.sprintf(LANG.confirm_signaturetoomanylines, 3)))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
$('form#change-password').submit(function () {
|
||||
var curPass = $('input[name=currentPassword]');
|
||||
var newPass = $('input[name=newPassword]');
|
||||
var checkPass = $('input[name=confirmPassword]');
|
||||
|
||||
if (!curPass.val() && !newPass.val() && !checkPass.val()) {
|
||||
alert(LANG.message_enteremailorpass);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (newPass.val() || checkPass.val()) {
|
||||
if (!curPass.val()) {
|
||||
alert(LANG.message_enterpassword);
|
||||
curPass[0].focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($WH.trim(newPass.val()).length < 6) {
|
||||
alert(LANG.message_passwordmin);
|
||||
newPass[0].focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($WH.trim(newPass.val()) === $WH.trim(curPass.val())) {
|
||||
alert(LANG.message_newpassdifferent);
|
||||
newPass[0].focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (newPass.val() !== checkPass.val()) {
|
||||
alert(LANG.message_passwordsdonotmatch);
|
||||
newPass[0].focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
$('form#change-email').submit(function () {
|
||||
var curMail = $('input[name=current-email]');
|
||||
var newMail = $('input[name=newemail]');
|
||||
|
||||
if (!newMail.val()) {
|
||||
alert(LANG.message_enteremailorpass);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (newMail.val()) {
|
||||
if (newMail.val() == curMail.val()) {
|
||||
alert(LANG.message_newemaildifferent);
|
||||
newMail[0].focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!g_isEmailValid(newMail.val())) {
|
||||
alert(LANG.message_emailnotvalid);
|
||||
newMail[0].focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
$('form#change-username').submit(function () {
|
||||
var curName = $('input[name=current-username]');
|
||||
var newName = $('input[name=newUsername]');
|
||||
|
||||
if (!newName.val()) {
|
||||
alert(LANG.message_enterusername);
|
||||
newName[0].focus();
|
||||
return false;
|
||||
}
|
||||
if ($WH.trim(newName.val()).length < 4) {
|
||||
alert(LANG.message_usernamemin);
|
||||
newName[0].focus();
|
||||
return false;
|
||||
}
|
||||
if (!g_isUsernameValid(newName.val())) {
|
||||
alert(LANG.message_usernamenotvalid);
|
||||
newName[0].focus();
|
||||
return false;
|
||||
}
|
||||
if (newName.val() == curName.val()) {
|
||||
alert(LANG.message_newnamedifferent);
|
||||
newName[0].focus();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function fa_validateForm(form) {
|
||||
if (form.elements.avatar[2].checked && form.elements.customicon.selectedIndex == 0) {
|
||||
form.action = '?upload=image-crop';
|
||||
form.enctype = 'multipart/form-data';
|
||||
}
|
||||
else {
|
||||
form.action = '?account=forum-avatar';
|
||||
form.enctype = 'application/x-www-form-urlencoded';
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function faChange(mode) {
|
||||
$WH.ge('avaSel1').style.display = (mode == 1 ? '': 'none');
|
||||
$WH.ge('avaSel2').style.display = (mode == 2 ? '': 'none');
|
||||
}
|
||||
|
||||
function spawi() {
|
||||
var inp = $WH.ge('wowicon');
|
||||
inp.value = $WH.trim(inp.value);
|
||||
|
||||
var preview = $WH.ge('avaPre1');
|
||||
while (preview.firstChild)
|
||||
$WH.de(preview.firstChild);
|
||||
|
||||
$WH.ae(preview, Icon.createUser(1, inp.value, 2, null, ((g_user.roles & U_GROUP_PREMIUM) ? g_user.settings.premiumborder : Icon.STANDARD_BORDER)));
|
||||
}
|
||||
|
||||
function spawj() {
|
||||
var avSelect = $WH.ge('customicon');
|
||||
var preview = $WH.ge('avaPre2');
|
||||
while (preview.firstChild)
|
||||
$WH.de(preview.firstChild);
|
||||
|
||||
if (avSelect.selectedIndex != 0) {
|
||||
$WH.ge('iconbrowse').style.display = 'none';
|
||||
iconId = avSelect.options[avSelect.selectedIndex].value;
|
||||
$WH.ae(preview, Icon.createUser(2, iconId, 2, null, ((g_user.roles & U_GROUP_PREMIUM) ? g_user.settings.premiumborder : Icon.STANDARD_BORDER)));
|
||||
preview.style.display = '';
|
||||
}
|
||||
else {
|
||||
preview.style.display = 'none';
|
||||
$WH.ge('iconbrowse').style.display = '';
|
||||
}
|
||||
}
|
||||
|
||||
var imageDetailDialog = new Dialog();
|
||||
Listview.templates.avatar = {
|
||||
sort: [4],
|
||||
nItemsPerPage: -1,
|
||||
mode: 1,
|
||||
poundable: 0,
|
||||
columns: [{
|
||||
id: 'name',
|
||||
name: LANG.name,
|
||||
type: 'text',
|
||||
value: 'name',
|
||||
align: 'left',
|
||||
compute: function (data, td, tr) {
|
||||
tr.onclick = imageDetailDialog.show.bind(null, 'imageupload', {
|
||||
data: data,
|
||||
onSubmit: this.template.updateImageInfo.bind(this, data)
|
||||
});
|
||||
var avIcon = Icon.createUser(2, data.id, 0, null, (g_user.roles & U_GROUP_PREMIUM) ? g_user.settings.premiumborder : Icon.STANDARD_BORDER);
|
||||
avIcon.style.cssFloat = avIcon.style.styleFloat = 'left';
|
||||
td.style.position = 'relative';
|
||||
$WH.ae(td, avIcon);
|
||||
$WH.ae(td, $WH.ce('span', { style: { paddingLeft: '7px', lineHeight: '1.8em' }, innerHTML: data.name }));
|
||||
if (data.current) {
|
||||
$WH.ae(td, $WH.ce('span', {
|
||||
style: {
|
||||
fontStyle: 'italic',
|
||||
cssFloat: 'right',
|
||||
styleFloat: 'right',
|
||||
marginTop: '3px'
|
||||
},
|
||||
className: 'small',
|
||||
innerHTML: 'Current'
|
||||
}));
|
||||
}
|
||||
},
|
||||
getVisibleText: function (a) {
|
||||
return a.caption;
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'size',
|
||||
name: 'Size',
|
||||
type: 'number',
|
||||
value: 'size',
|
||||
width: '125px',
|
||||
compute: function (a, b) {
|
||||
return Listview.funcBox.coFormatFileSize(a.size)
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'status',
|
||||
name: 'Status',
|
||||
type: 'text',
|
||||
value: 'status',
|
||||
width: '100px',
|
||||
compute: function (a, b) {
|
||||
if (a.status == 2)
|
||||
$WH.ae(b, $WH.ce('span', { className: 'q10', innerHTML: 'Rejected' }))
|
||||
else
|
||||
return 'Ready';
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'when',
|
||||
name: 'When',
|
||||
type: 'date',
|
||||
value: 'when',
|
||||
width: '150px',
|
||||
compute: function (b, d) {
|
||||
var c = $WH.ce('span');
|
||||
var a = new Date(b.when);
|
||||
g_formatDate(c, (g_serverTime - a) / 1000, a);
|
||||
$WH.ae(d, c)
|
||||
}
|
||||
}],
|
||||
onBeforeCreate: function () {
|
||||
for (i in this.data)
|
||||
this.data[i].pos = i;
|
||||
},
|
||||
createCbControls: function (e, d) {
|
||||
if (!d && this.data.length < 15)
|
||||
return;
|
||||
|
||||
var c = $WH.ce('input'),
|
||||
b = $WH.ce('input'),
|
||||
a = $WH.ce('input');
|
||||
|
||||
c.type = b.type = a.type = 'button';
|
||||
|
||||
c.value = 'Delete';
|
||||
b.value = 'Set as avatar';
|
||||
a.value = 'Upload new one';
|
||||
|
||||
c.onclick = this.template.deleteFiles.bind(this);
|
||||
b.onclick = this.template.useAvatar.bind(this);
|
||||
a.onclick = this.template.jumpToUpload.bind(this);
|
||||
|
||||
$WH.ae(e, b);
|
||||
$WH.ae(e, c);
|
||||
$WH.ae(e, a);
|
||||
},
|
||||
updateImageInfo: function (b, a) {
|
||||
if (b.name != a.name) {
|
||||
$.post('?account=rename-icon', {
|
||||
id: a.id,
|
||||
name: a.name
|
||||
});
|
||||
this.setRow(a);
|
||||
}
|
||||
},
|
||||
deleteFiles: function () {
|
||||
var rows = this.getCheckedRows();
|
||||
if (!rows.length)
|
||||
return;
|
||||
|
||||
var ids = '',
|
||||
first = true;
|
||||
$WH.array_walk(rows, function (x) {
|
||||
if (first)
|
||||
first = false;
|
||||
else
|
||||
ids += ',';
|
||||
|
||||
ids += x.id;
|
||||
});
|
||||
|
||||
var _ = confirm('Are you sure you want to delete these icons?');
|
||||
if (_ == false)
|
||||
return;
|
||||
|
||||
$.post('?account=delete-icon', { id: ids });
|
||||
|
||||
this.deleteRows(rows);
|
||||
this.resetCheckedRows();
|
||||
this.refreshRows();
|
||||
},
|
||||
useAvatar: function () {
|
||||
var rows = this.getCheckedRows();
|
||||
if (!rows.length)
|
||||
return;
|
||||
|
||||
if (rows.length > 1) {
|
||||
alert('Please select only 1 image to use as your avatar.');
|
||||
return;
|
||||
}
|
||||
|
||||
var row = rows[0];
|
||||
$WH.array_walk(this.data, function (x) {
|
||||
x.current = 0;
|
||||
x.__tr = null
|
||||
});
|
||||
row.current = 1;
|
||||
|
||||
new Ajax('?account=forum-avatar&avatar=2&customicon=' + row.id);
|
||||
this.refreshRows()
|
||||
},
|
||||
jumpToUpload: function () {
|
||||
// aowow - community is not on idx:2 for extAuth cases
|
||||
// _.show(2);
|
||||
_.show(_.tabs.findIndex((x) => x.id == 'community'));
|
||||
location.href = '?account#community';
|
||||
|
||||
var a = $WH.ac(document.fa);
|
||||
window.scrollTo(0, a.y);
|
||||
|
||||
document.fa.avatar[2].click();
|
||||
document.fa.customicon.selectedIndex = 0;
|
||||
|
||||
spawj();
|
||||
},
|
||||
onNoData: function (lv) {
|
||||
var sp = $WH.ce('span');
|
||||
var a = $WH.ce('a');
|
||||
|
||||
a.onclick = this.template.jumpToUpload.bind(this);
|
||||
a.href = 'javascript:;';
|
||||
$WH.ae(a, $WH.ct('Upload'));
|
||||
|
||||
$WH.ae(sp, $WH.ct("You havn't uploaded any custom avatars yet. "));
|
||||
$WH.ae(sp, a);
|
||||
$WH.ae(sp, $WH.ct(' one now!'));
|
||||
|
||||
$WH.ae(lv, sp);
|
||||
}
|
||||
};
|
||||
|
||||
Dialog.templates.imageupload = {
|
||||
title: LANG.dialog_imagedetails,
|
||||
// aowow - adapted to existing css - buttons: [['check', LANG.ok], ['x', LANG.cancel]],
|
||||
buttons: [['okay', LANG.ok], ['cancel', LANG.cancel]],
|
||||
fields: [
|
||||
{
|
||||
id: 'id',
|
||||
type: 'hidden',
|
||||
label: ' ',
|
||||
size: 30,
|
||||
required: 0,
|
||||
compute: function (field, value, form, td, tr) {
|
||||
var div = $WH.ce('div');
|
||||
div.style.position = 'relative';
|
||||
|
||||
var div2 = $WH.ce('div');
|
||||
div2.style.position = 'relative';
|
||||
|
||||
var img = $WH.ce('img');
|
||||
switch (this.data.type) {
|
||||
case 1:
|
||||
img = Icon.createUser(2, null, 2, null, (g_user.roles & U_GROUP_PREMIUM) ? g_user.settings.premiumborder : Icon.STANDARD_BORDER);
|
||||
break;
|
||||
}
|
||||
|
||||
$WH.ae(div2, img);
|
||||
this.icon = img;
|
||||
|
||||
$WH.ae(div, field);
|
||||
$WH.ae(div, div2);
|
||||
|
||||
$WH.ae(td, div);
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'name',
|
||||
type: 'text',
|
||||
label: LANG.dialog_imagename,
|
||||
size: 20,
|
||||
required: 1,
|
||||
submitOnEnter: 1,
|
||||
validate: function (newValue, data) {
|
||||
if (newValue.match(/^[a-zA-Z][a-zA-Z0-9 ]{0,19}$/))
|
||||
return true;
|
||||
else {
|
||||
alert(LANG.message_invalidname);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
},
|
||||
],
|
||||
onBeforeShow: function () {
|
||||
switch (this.data.type) {
|
||||
case 1:
|
||||
this.template.width = 300;
|
||||
break;
|
||||
}
|
||||
},
|
||||
onShow: function (form) {
|
||||
switch (this.data.type) {
|
||||
case 1:
|
||||
var url = g_staticUrl + '/uploads/avatars/' + this.data.id + '.jpg';
|
||||
Icon.setTexture(this.icon, 2, url);
|
||||
break;
|
||||
}
|
||||
setTimeout(function () {
|
||||
var inp = form.elements.name;
|
||||
inp.focus();
|
||||
inp.select();
|
||||
}, 1);
|
||||
}
|
||||
};
|
||||
@@ -2965,6 +2965,7 @@ var LANG = {
|
||||
message_invalidname: "Bildname ist ungültig. Muss alphanumerisch sein, maximal 20 Zeichen haben und mit einem Buchstaben anfangen.",
|
||||
message_newemaildifferent: "Eure neue E-Mail-Adresse muss sich von eurer alten E-Mail-Adresse unterscheiden.",
|
||||
message_newpassdifferent: "Euer neues Kennwort muss sich von eurem alten Kennwort unterscheiden.",
|
||||
message_newnamedifferent: "Euer neuer Benutzername muss sich von eurem alten Benutzernamen unterscheiden.",
|
||||
message_noscreenshot: "Wählt bitte den Screenshot aus, den Ihr hochladen möchtet.",
|
||||
message_novideo: "Bitte gebt gültige Videoinformationen ein.",
|
||||
message_nothingtoviewin3d: "Es wurden keine Gegenstände ausgewählt, die in 3D angezeigt werden können.",
|
||||
|
||||
@@ -3014,6 +3014,7 @@ var LANG = {
|
||||
message_invalidname: "Image name is invalid. Must be alphanumeric, 20 characters max, and start with a letter.",
|
||||
message_newemaildifferent: "Your new email address must be different than your previous one.",
|
||||
message_newpassdifferent: "Your new password must be different than your previous one.",
|
||||
message_newnamedifferent: "Your new username must be different than your previous one.",
|
||||
message_noscreenshot: "Please select the screenshot to upload.",
|
||||
message_novideo: "Please enter valid video information.",
|
||||
message_nothingtoviewin3d: "No items were selected that can be viewed in 3D.",
|
||||
|
||||
@@ -2965,6 +2965,7 @@ var LANG = {
|
||||
message_invalidname: "El nombre de la imagen es inválido. Debe ser alfanumérico con un máx de 20 caracteres y debe empezar por una letra.",
|
||||
message_newemaildifferent: "Su nueva dirección de correo electrónico tiene que ser diferente a tu dirección de correo electrónico anterior.",
|
||||
message_newpassdifferent: "Su nueva contraseña tiene que ser diferente a Su contraseña anterior.",
|
||||
message_newnamedifferent: "Su nuevo nombre de usuario tiene que ser diferente a su nombre de usuario anterior.",
|
||||
message_noscreenshot: "Por favor seleccione la captura de pantalla para subir.",
|
||||
message_novideo: "Por favor, introduce información válida del vídeo.",
|
||||
message_nothingtoviewin3d: "No se han seleccionado objetos que se puedan ver en 3D.",
|
||||
|
||||
@@ -2966,6 +2966,7 @@ var LANG = {
|
||||
message_invalidname: "Le nom de l'image est invalide. Doit être alphanumérique, 20 caractères maximum et doit commencer par une lettre.",
|
||||
message_newemaildifferent: "Votre nouvelle adresse courriel doit être différente de l'ancienne.",
|
||||
message_newpassdifferent: "Votre nouveau mot de passe doit être différent de l'ancien.",
|
||||
message_newnamedifferent: "Votre nouveau nom d'utilisateur doit être différent de l'ancien.",
|
||||
message_noscreenshot: "Veuillez sélectionner la capture d'écran à envoyer.",
|
||||
message_novideo: "Veuillez entrer des informations valide pour le vidéo.",
|
||||
message_nothingtoviewin3d: "Aucun objets qui ont été sélectionnés ne peuvent être vus en 3D.",
|
||||
|
||||
@@ -2966,6 +2966,7 @@ var LANG = {
|
||||
message_invalidname: "Название изображения некорректно. Должно содержать только латинские буквы и цифры, начинаться с буквы, и быть не более 20 символов в длину.",
|
||||
message_newemaildifferent: "Прежний и новый e-mail адреса не должны совпадать.",
|
||||
message_newpassdifferent: "Прежний и новый пароли не должны совпадать.",
|
||||
message_newnamedifferent: "Прежнее и новое имя пользователя не должны совпадать.",
|
||||
message_noscreenshot: "Выберите изображение для загрузки.",
|
||||
message_novideo: "Введите корректную информацию о видео.",
|
||||
message_nothingtoviewin3d: "Вы не выбрали предметы, которые можно просмотреть в 3D.",
|
||||
|
||||
@@ -3013,6 +3013,7 @@ var LANG = {
|
||||
message_invalidname: "图片名无效。必须使用字母和数字,最多20个字符,以字母开头。",
|
||||
message_newemaildifferent: "您的新邮箱地址必须不同于旧地址。",
|
||||
message_newpassdifferent: "您的新密码必须不同于旧密码。",
|
||||
message_newnamedifferent: "您的新用户名必须不同于旧用户名。",
|
||||
message_noscreenshot: "请选择要上传的截屏。",
|
||||
message_novideo: "请输入有效的视频信息。",
|
||||
message_nothingtoviewin3d: "没有选中可以3D浏览的物品。",
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
<?php if ($hasRecovery): ?>
|
||||
<br />
|
||||
<div style="position: absolute; right: 5px; bottom: 5px; white-space: nowrap;"><?=Lang::account('forgot').Lang::main('colon'); ?><a href="?account=forgotusername"><?=Lang::account('forgotUser'); ?></a> | <a href="?account=forgotpassword"><?=Lang::account('forgotPass'); ?></a> | <a href="?account=resend"><?=Lang::account('resendMail'); ?></a></div>
|
||||
<div style="position: absolute; right: 5px; bottom: 5px; white-space: nowrap;"><?=Lang::account('forgot').Lang::main('colon'); ?><a href="?account=forgotusername"><?=Lang::account('forgotUser'); ?></a> | <a href="?account=forgotpassword"><?=Lang::account('forgotPass'); ?></a> | <a href="?account=resend"><?=Lang::account('inputbox', 'head', 'resendMail'); ?></a></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -1,141 +0,0 @@
|
||||
<?php namespace Aowow; ?>
|
||||
|
||||
<?php $this->brick('header'); ?>
|
||||
|
||||
<div class="main" id="main">
|
||||
<div class="main-precontents" id="main-precontents"></div>
|
||||
<div class="main-contents" id="main-contents">
|
||||
|
||||
<?php
|
||||
$this->brick('announcement');
|
||||
|
||||
$this->brick('pageTemplate');
|
||||
|
||||
$this->brick('infobox');
|
||||
?>
|
||||
|
||||
<script type="text/javascript">var g_pageInfo = { username: '<?=Util::jsEscape($this->gUser['name']); ?>' }</script>
|
||||
|
||||
<div class="text">
|
||||
<h1><?=Lang::account('myAccount'); ?></h1>
|
||||
<?php
|
||||
// Banned-Minibox
|
||||
if ($b = $this->banned):
|
||||
?>
|
||||
<div style="max-width:300px;" class="minibox">
|
||||
<h1 class="q10"><?=Lang::account('accBanned'); ?></h1>
|
||||
<ul style="text-align:left">
|
||||
<li><div><?='<b>'.Lang::account('bannedBy').'</b>'.Lang::main('colon').'<a href="?user='.$b['by'][0].'">'.$b['by'][1].'</a>'; ?></div></li>
|
||||
<li><div><?='<b>'.Lang::account('ends').'</b>'.Lang::main('colon').($b['end'] ? date(Lang::main('dateFmtLong'), $b['end']) : Lang::account('permanent')); ?></div></li>
|
||||
<li><div><?='<b>'.Lang::account('reason').'</b>'.Lang::main('colon').'<span class="msg-failure">'.($b['reason'] ?: Lang::account('noReason')).'</span>'; ?></div></li>
|
||||
</ul>
|
||||
</div>
|
||||
<?php
|
||||
/* todo (sometime else)
|
||||
else:
|
||||
|
||||
// profile editing
|
||||
echo ' '.Lang::account('editAccount')."\n";
|
||||
?>
|
||||
|
||||
<ul class="last">
|
||||
<li><div><a href="#community">{$lang.publicDesc}</a></div></li>
|
||||
<li><div><a href="#claim-characters">{$lang.claimChars}</a></div></li>
|
||||
<li><div><a href="#change-avatar">{$lang.changeAvatar}</a></div></li>
|
||||
<li><div><a href="#change-password">{$lang.pass}</a></div></li>
|
||||
<li><div><a href="#change-name">{$lang.name}</a></div></li>
|
||||
<li><div><a href="#change-email">{$lang.email}</a></div></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2 id="community">{$lang.publicDesc}</h2>
|
||||
<div class="msg-success" style="display:{if $pdupdate}block{else}none{/if};">{$lang.Your_description_has_been_updated_successfully}.</div>
|
||||
|
||||
<form action="?account=public-description" name="pd" method="post" onsubmit="return spd(this)">
|
||||
{$lang.viewPublicDesc|sprintf:$user.name}.
|
||||
<div class="pad2"></div>
|
||||
<div id="pd"></div>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
Listview.funcBox.coEditAppend($WH.ge('pd'), {body: '{$user.community|escape:"javascript"}'}, 2);
|
||||
//]]></script>
|
||||
<div class="pad"></div>
|
||||
<input type="submit" value="{$lang.submit}" />
|
||||
</form>
|
||||
{* CLAIM CHARACTERS *}
|
||||
<h2 id="select-character">[Select Character]</h2>
|
||||
{strip}
|
||||
|
||||
{if $user.chars}
|
||||
<table>
|
||||
{foreach from=$user.chars item=c}
|
||||
<tr>
|
||||
<td><div class="iconsmall"><ins style="background-image: url(images/icons/small/{$c.icon}.jpg);"></ins><del></del></div></td>
|
||||
<td>
|
||||
{if $c.this}
|
||||
<b>{$c.name}</b>
|
||||
{else}
|
||||
<a href="?account=select-character&id={$c.guid}">{$c.name}</a>
|
||||
{/if}
|
||||
|
||||
{if $c.guild}
|
||||
<b><{$c.guild|escape:"html"}></b>
|
||||
{/if}
|
||||
— {$c.text}
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</table>
|
||||
{else}
|
||||
[no characters on ths account]
|
||||
{/if}
|
||||
<div class="pad"></div>
|
||||
|
||||
{/strip}
|
||||
{* CHANGE PASSWORD / EMAIL / DISPLAYNAME / AVATAR * }
|
||||
<h2 id="change-password">{$lang.Change_password}</h2>
|
||||
<form action="?account" method="post">
|
||||
<input type="hidden" name="what" value="change-pass" />
|
||||
{if isset($cpmsg)}
|
||||
<div class="msg-{$cpmsg.class}">{$cpmsg.msg}</div>
|
||||
{/if}
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr><td nowrap="nowrap">{$lang.Current_password}{$lang.colon}</td><td><input style="width: 15em" name="old" type="password" value="" /></td></tr>
|
||||
<tr><td nowrap="nowrap">{$lang.New_password}{$lang.colon}</td><td><input style="width: 15em" name="new" type="password" value="" /></td></tr>
|
||||
<tr><td nowrap="nowrap">{$lang.Confirm_new_password}{$lang.colon}</td><td><input style="width: 15em" name="new2" type="password" value="" /></td></tr>
|
||||
<tr><td></td><td><input value="{$lang.submit}" type="submit" /></td></tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<?php
|
||||
*/
|
||||
endif;
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
/*
|
||||
<div class="clear"></div>
|
||||
<div id="related-tabs"></div>
|
||||
<div id="lv-generic" class="listview">
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
var tabsRelated = new Tabs({parent: $WH.ge('related-tabs')});
|
||||
|
||||
// relevant tabs here
|
||||
|
||||
# set in header
|
||||
var lv_comments = [{id:1191765,type:12,typeId:1,subject:'Example Comment',preview:'And here is a little preview for this comment, that is capped after 75 char....',rating:15,date:'2010/11/27 22:23:16',elapsed:43866462,deleted:0,purged:1,domain:'live'}];
|
||||
var lv_screenshots = [], lv_videos = [];
|
||||
new Listview({template: "commentpreview", id: "comments", name: LANG.tab_comments, tabs: tabsRelated, parent: "lv-generic", onBeforeCreate: Listview.funcBox.beforeUserComments, hiddenCols: ['author'], data: lv_comments});
|
||||
new Listview({template: "screenshot", id: "screenshots", name: LANG.tab_screenshots, tabs: tabsRelated, parent: "lv-generic", data: lv_screenshots});
|
||||
new Listview({template: "video", id: "videos", name: LANG.tab_videos, tabs: tabsRelated, parent: "lv-generic", data: lv_videos});
|
||||
tabsRelated.flush();
|
||||
//]]></script>
|
||||
*/
|
||||
?>
|
||||
|
||||
<?php $this->brick('lvTabs'); ?>
|
||||
|
||||
<div class="clear"></div>
|
||||
</div><!-- main-contents -->
|
||||
</div><!-- main -->
|
||||
|
||||
<?php $this->brick('footer'); ?>
|
||||
291
template/pages/account.tpl.php
Normal file
291
template/pages/account.tpl.php
Normal file
@@ -0,0 +1,291 @@
|
||||
<?php
|
||||
namespace Aowow\Template;
|
||||
|
||||
use \Aowow\Lang;
|
||||
|
||||
$this->brick('header');
|
||||
?>
|
||||
<div class="main" id="main">
|
||||
<div class="main-precontents" id="main-precontents"></div>
|
||||
<div class="main-contents" id="main-contents">
|
||||
|
||||
<?php
|
||||
$this->brick('announcement');
|
||||
|
||||
$this->brick('pageTemplate');
|
||||
?>
|
||||
|
||||
<div class="text">
|
||||
<h1><?=Lang::account('settings');?></h1>
|
||||
<?php
|
||||
// Banned-Minibox
|
||||
if ($this->bans):
|
||||
foreach ($this->bans as $b):
|
||||
[$end, $reason, $name] = $b;
|
||||
?>
|
||||
<div style="max-width:300px;" class="minibox minibox-left">
|
||||
<h1 class="q10"><?=Lang::account('accBanned'); ?></h1>
|
||||
<ul style="text-align:left">
|
||||
<li><div><?='<b>'.Lang::account('bannedBy').'</b>'.($name ? '<a href="?user='.$name.'">'.$name.'</a>' : '<span ="q0"><System></span>');?></div></li>
|
||||
<li><div><?='<b>'.Lang::account('ends').'</b>'.($end ? date(Lang::main('dateFmtLong'), $end) : Lang::account('permanent'));?></div></li>
|
||||
<li><div><?='<b>'.Lang::account('reason').'</b>'.'<span class="msg-failure">'.($reason ?: Lang::account('noReason')).'</span>';?></div></li>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<?php else: ?>
|
||||
<?=Lang::account('settingsNote');?>
|
||||
|
||||
<div class="pad3"></div>
|
||||
</div>
|
||||
|
||||
<div id="tabs-generic"></div>
|
||||
|
||||
<div class="text">
|
||||
<div class="tabbed-contents">
|
||||
|
||||
<div id="tab-general" style="display: none">
|
||||
<form action="?account=update-general-settings" name="um" method="post">
|
||||
<h2 class="first" id="preferences"><?=Lang::account('preferences');?></h2>
|
||||
|
||||
<?php if ([$type, $msg] = $this->generalMessage): ?>
|
||||
<div class="box"><div class="msg-<?=($type ? 'success' : 'failure');?>"><?=$msg;?></div></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div style="text-align: left">
|
||||
<h3 class="first"><?=Lang::account('modelviewer');?></h3>
|
||||
<table>
|
||||
<tr><td><?=Lang::account('mvNote'); ?></td>
|
||||
<td><select id="modelrace" name="modelrace">
|
||||
<option></option>
|
||||
<?=$this->makeOptionsList(Lang::game('ra'), $this->modelrace, 44, fn($v, $k) => $k > 0); ?>
|
||||
</select>
|
||||
<select id="modelgender" name="modelgender">
|
||||
<option></option>
|
||||
<?=$this->makeOptionsList(Lang::main('sex'), $this->modelgender, 44); ?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="pad"></div>
|
||||
|
||||
<h3><?=Lang::account('lists'); ?></h3>
|
||||
<label><input type="checkbox" name="idsInLists"<?=($this->idsInLists ? ' checked="checked"' : '');?> /><?=Lang::account('listsNote'); ?></label>
|
||||
|
||||
<div class="pad"></div>
|
||||
|
||||
<h3><?=Lang::account('announcements');?></h3>
|
||||
<button id="purgeannouncements" onclick="this.readonly = true; var button = this; new Ajax('?cookie&purge', { onSuccess: function(xhr) { if(xhr.responseText == '0') { var span = $WH.ge('announcetext'); $WH.ee(span); $WH.ae(span, $WH.ct(LANG.myaccount_purgesuccess)); span.className = 'q2'; } else { alert(LANG.myaccount_purgefailed); } }, onComplete: function() { button.readonly = false; } }); return false;"><?=Lang::account('purge');?></button> <span id="announcetext"><?=Lang::account('annNote');?></span>
|
||||
</div>
|
||||
|
||||
<div class="pad3"></div>
|
||||
<input value="<?=Lang::main('submit');?>" type="submit" name="do-general-settings-update" />
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
if ($this->cfg('ACC_AUTH_MODE') == AUTH_MODE_SELF):
|
||||
?>
|
||||
<div id="tab-personal" style="display: none">
|
||||
<h2 class="first" id="change-email-address"><?=Lang::account('email');?></h2>
|
||||
|
||||
<?php if ([$type, $msg] = $this->emailMessage): ?>
|
||||
<div class="box"><div class="msg-<?=($type ? 'success' : 'failure');?>"><?=$msg;?></div></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form action="?account=update-email" name="ce" method="post" id="change-email">
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr><td nowrap="nowrap"><?=Lang::account('curEmail');?></td><td><input disabled="disabled" name="current-email" style="width: 15em" value="<?=$this->curEmail;?>" readonly="readonly" /></td></tr>
|
||||
<tr><td nowrap="nowrap"><?=Lang::account('newEmail');?></td><td><input name="newemail" style="width: 15em" value="" /></td></tr>
|
||||
</table>
|
||||
<div class="pad"></div>
|
||||
<input value="<?=Lang::main('submit');?>" type="submit" name="do-update-email" />
|
||||
</form>
|
||||
|
||||
<h2 id="change-username"><?=Lang::account('user');?></h2>
|
||||
|
||||
<?php if ([$type, $msg] = $this->usernameMessage): ?>
|
||||
<div class="box"><div class="msg-<?=($type ? 'success' : 'failure');?>"><?=$msg;?></div></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div><?=Lang::account('usernameNote');?></div>
|
||||
<?php if ($this->renameCD): ?>
|
||||
<div class="msg-failure pad3"><br /><?=Lang::account('renameCD', [$this->renameCD]);?></div>
|
||||
<?php endif; ?>
|
||||
<form action="?account=update-username" name="ce" method="post" id="change-username">
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr><td nowrap="nowrap"><?=Lang::account('curName');?></td><td><input disabled="disabled" name="current-username" style="width: 15em" value="<?=$this->curName;?>" readonly="readonly" /></td></tr>
|
||||
<tr><td nowrap="nowrap"><?=Lang::account('newName');?></td><td><input name="newUsername" style="width: 15em" value="" /></td></tr>
|
||||
</table>
|
||||
<div class="pad"></div>
|
||||
<input value="<?=Lang::main('submit');?>" type="submit" name="do-update-username" />
|
||||
</form>
|
||||
|
||||
<h2 id="change-password"><?=Lang::account('pass');?></h2>
|
||||
|
||||
<?php if ([$type, $msg] = $this->passwordMessage): ?>
|
||||
<div class="box"><div class="msg-<?=($type ? 'success' : 'failure');?>"><?=$msg;?></div></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form action="?account=update-password" name="cp" method="post" id="change-password">
|
||||
<table cellspacing="5" cellpadding="0" border="0">
|
||||
<tr><td nowrap="nowrap"><?=Lang::account('curPass');?></td><td colspan="3"><input name="currentPassword" style="width: 15em" type="password" value="" /></td></tr>
|
||||
<tr><td nowrap="nowrap"><?=Lang::account('newPass');?></td><td><input name="newPassword" id="newpass" style="width: 15em" type="password" value="" onkeyup="setTimeout('pm()',10)" /></td><td id="pm1" rowspan="2" valign="middle" style="font-size: 38px"> </td><td id="pm2" rowspan="2" valign="middle" nowrap="nowrap" style="padding-top: 4px"> </td></tr>
|
||||
<tr><td nowrap="nowrap"><?=Lang::account('confNewPass');?></td><td><input name="confirmPassword" id="confirmpass" style="width: 15em" type="password" value="" onkeyup="setTimeout('pm()',10)" /></td></tr>
|
||||
<tr><td nowrap="nowrap"><?=Lang::account('globalLogout');?></td><td><input type="checkbox" name="globalLogout" /></td></tr>
|
||||
</table>
|
||||
<div class="pad"></div>
|
||||
<input value="<?=Lang::main('submit');?>" type="submit" name="do-update-password" />
|
||||
<div style="padding-top:10px; font-size:0.8em"><?=Lang::account('passResetHint');?></div>
|
||||
</form>
|
||||
<script type="text/javascript">pm()</script>
|
||||
|
||||
<h2><?=Lang::account('accDelete');?></h2>
|
||||
<div><?=Lang::account('accDeleteNote');?></div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
endif;
|
||||
?>
|
||||
<div id="tab-community" style="display: none">
|
||||
<h2 class="first"><?=Lang::account('userPage');?></h2>
|
||||
|
||||
<h3 id="public-description"><?=Lang::account('publicDesc');?></h3>
|
||||
|
||||
<?php if ([$type, $msg] = $this->communityMessage): ?>
|
||||
<div class="box"><div class="msg-<?=($type ? 'success' : 'failure');?>"><?=$msg;?></div></div>
|
||||
<?php endif; ?>
|
||||
<form action="?account=update-community-settings" name="community-settings" method="post" onsubmit="return spd(this)/* && sfs(this) */">
|
||||
<?=Lang::account('publicDescNote', [urlencode($this->user::$username)]);?>
|
||||
|
||||
<div class="pad2"></div>
|
||||
<div>
|
||||
<div id="description-generic"></div>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
Listview.funcBox.coEditAppend($('#description-generic'), <?=$this->json($this->description); ?>, 2);
|
||||
//]]></script>
|
||||
|
||||
<div class="pad"></div>
|
||||
<input type="submit" value="<?=Lang::main('save');?>" name="do-community-settings-update" />
|
||||
</div>
|
||||
<?php
|
||||
/* signature not used
|
||||
<h2><?=Lang::account('forums');?></h2>
|
||||
<h3 id="forum-signature"><?=Lang::account('signature');?></h3>
|
||||
<?=Lang::account('signatureNote');?>
|
||||
|
||||
<div class="pad2"></div>
|
||||
<div>
|
||||
<div id="signature-generic"></div>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
Listview.funcBox.coEditAppend($('#signature-generic'), <?=$this->json($this->description); ?>, 4);
|
||||
//]]></script>
|
||||
|
||||
<div class="pad"></div>
|
||||
<input type="submit" value="<?=Lang::main('save');?>" name="do-community-settings-update" />
|
||||
</div>
|
||||
*/
|
||||
?>
|
||||
</form>
|
||||
|
||||
<h3 id="forum-avatar"><?=Lang::account('avatar');?></h3>
|
||||
|
||||
<?php if ([$type, $msg] = $this->avatarMessage): ?>
|
||||
<div class="box"><div class="msg-<?=($type ? 'success' : 'failure');?>"><?=$msg;?></div></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form action="?account=forum-avatar" name="fa" method="post" enctype="multipart/form-data" onsubmit="return fa_validateForm(this)">
|
||||
<?=Lang::account('avatarNote');?>
|
||||
|
||||
<div class="pad2"></div>
|
||||
|
||||
<input type="radio" name="avatar" value="0" id="avaOpt0" onclick="faChange(0)"<?=($this->avMode == 0 ? ' checked="checked"' : '');?> /> <label for="avaOpt0"><?=Lang::account('none');?></label><br />
|
||||
|
||||
<input type="radio" name="avatar" value="1" id="avaOpt1" onclick="faChange(1)"<?=($this->avMode == 1 ? ' checked="checked"' : '');?> /> <label for="avaOpt1"><?=Lang::account('avWowIcon');?></label>
|
||||
<div id="avaSel1" style="display: none">
|
||||
<div style="float: left; position: relative; padding: 6px; margin-top: 4px; margin-left: 16px; border-left: 1px solid #404040">
|
||||
<div id="avaPre1" style="position: absolute; right: -68px; top: -18px"></div>
|
||||
<?=Lang::account('avIconName');?> <input type="text" name="wowicon" id="wowicon" value="<?=$this->wowicon;?>" maxlength="64" size="35" /><input type="button" value="<?=Lang::account('preview');?>" onclick="spawi()" />
|
||||
<br />
|
||||
<div style="max-width: 400px"><small><?=Lang::account('avWowIconNote');?></small></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
|
||||
<?php if ($this->user::isInGroup(U_GROUP_PREMIUM) && 0): ?>
|
||||
<input type="radio" name="avatar" value="2" id="avaOpt2" onclick="faChange(2)"<?=($this->avMode == 2 ? ' checked="checked"' : '');?> /> <label for="avaOpt2"><?=Lang::account('custom');?></label> <span class="premium-feature-icon-small"></span><table id="avaSel2" style="padding: 6px; margin-top: 4px; margin-left: 16px; border-left: 1px solid #404040; height: 85px">
|
||||
<tr><td style="padding: 5px; vertical-align: top; position: relative;">
|
||||
<select name="customicon" id="customicon" style="min-width: 150px; margin-right: 5px;" onchange="spawj()">
|
||||
<option>Upload new Avatar</option>
|
||||
<?=$this->makeOptionsList($this->customicons, $this->customicon, 40); ?>
|
||||
</select>
|
||||
<div id="avaPre2" style="position: absolute; right: -68px; top: 0px"></div>
|
||||
</td><td style="padding: 5px; vertical-align: top;">
|
||||
<div id="iconbrowse">
|
||||
<input type="file" name="iconfile">
|
||||
<div class="pad"></div>
|
||||
Go to <a href="javascript:;" onclick="_.show(3, true);">Avatar Manager</a>
|
||||
</div>
|
||||
</td></tr>
|
||||
</table>
|
||||
<?php else: ?>
|
||||
<input type="radio" name="avatar" value="2" id="avaOpt2" onclick="faChange(2)" disabled="disabled" /> <label for="avaOpt2" class="q0"><?=Lang::account('custom'); ?></label> <span class="premium-feature-icon-small"></span><table id="avaSel2" style="display:none"></table>
|
||||
<?php endif; ?>
|
||||
<div class="clear"></div>
|
||||
|
||||
<script type="text/javascript">
|
||||
faChange(<?=$this->avMode;?>);
|
||||
spawi();
|
||||
<?=($this->user::isPremium() ? 'spawj();' : ''); ?>
|
||||
|
||||
</script>
|
||||
|
||||
<div class="pad"></div>
|
||||
<input type="submit" value="<?=Lang::main('submit');?>" />
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="tab-premium" style="display: none; min-height: 70px;">
|
||||
<h3 class="first"><?=Lang::account('premiumStatus');?></h3>
|
||||
<?php if (!$this->user::isPremium()): ?>
|
||||
<ul><li><div><?=Lang::account('status').Lang::main('colon').'<b class="q10">'.Lang::account('inactive'); ?></b></div></li></ul>
|
||||
<?php else: ?>
|
||||
<ul><li><div><?=Lang::account('status').Lang::main('colon').'<b class="q2">'.Lang::account('active'); ?></b></div></li></ul>
|
||||
<?php endif; /*
|
||||
<h2>Manage Avatars</h2>
|
||||
<div id="avatar-manage" class="listview" style="margin: 0px 10% 0px 25px;"></div>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
<?=$this->avatarManager; ?>
|
||||
//]]></script>
|
||||
|
||||
<h2>Manage Premium Borders</h2>
|
||||
<span>Todo</span>
|
||||
<?php endif; */ ?>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
var _ = new Tabs({parent: $WH.ge('tabs-generic')});
|
||||
_.add('<?=Lang::account('tabGeneral');?>', {id: 'general'});
|
||||
<?php if ($this->cfg('ACC_AUTH_MODE') == AUTH_MODE_SELF): ?>
|
||||
_.add('<?=Lang::account('tabPersonal');?>', {id: 'personal'});
|
||||
<?php endif; ?>
|
||||
_.add('<?=Lang::account('tabCommunity');?>', {id: 'community'});
|
||||
_.add('<?=Lang::account('tabPremium');?>', {id: 'premium'});
|
||||
_.flush();
|
||||
</script>
|
||||
<?php
|
||||
endif;
|
||||
?>
|
||||
|
||||
<div class="clear"></div>
|
||||
</div><!-- main-contents -->
|
||||
</div><!-- main -->
|
||||
|
||||
<?php $this->brick('footer'); ?>
|
||||
Reference in New Issue
Block a user