Files
TravianZ/Templates/Message/write.tpl
T
Catalin Novgorodschi a02be51969 Incremental Refactor Templates
Incremental Refactor Templates
2026-05-06 13:16:54 +03:00

277 lines
21 KiB
Smarty

<?php
#################################################################################
## SAFE INCREMENTAL REFACTOR - Write Messages ##
## Credits: optimized structure, same logic preserved ##
## Compatibility: PHP 5.6+ / PHP 7+ ##
#################################################################################
?>
<div id="content" class="messages">
<h1>Messages</h1>
<?php
include("menu.tpl");
// ======================================================
// USER DATA (single load)
// ======================================================
$user = $database->getUserArray($session->uid, 1);
// cache username (reduce SQL calls)
$userCache = [];
function getCachedUsername($uid, $database, &$cache) {
$uid = (int)$uid;
if (!isset($cache[$uid])) {
$cache[$uid] = $database->getUserField($uid, 'username', 0);
}
return $cache[$uid];
}
?>
<script language="JavaScript" type="text/javascript">
// JS rămâne IDENTIC (nu modificăm comportament)
function setReceiver(name) {
document.getElementById('receiver').value = name;
copyElement('receiver');
}
function closeFriendsList() {
document.getElementById('adressbook').className = 'hide';
}
function toggleFriendsList() {
var book = document.getElementById('adressbook');
if (book.className == 'hide') book.className = '';
else book.className = 'hide';
}
function copyElement(element) {}
function submitDefault(type,uid) {
var book = document.abform;
book.sbmtype.value = type;
book.sbmvalue.value = uid;
book.submit();
}
</script>
<div id="write_head" class="msg_head"></div>
<div id="write_content" class="msg_content">
<form method="post" action="nachrichten.php" accept-charset="UTF-8" name="msg">
<input type="hidden" name="c" value="3e9" />
<input type="hidden" name="p" value="" />
<img src="img/x.gif" id="label" class="send" alt="" />
<div id="heading">
<!-- ======================================================
RECEIVER
====================================================== -->
<input class="text" type="text" name="an" id="receiver"
value="<?php
if (isset($id)) {
echo getCachedUsername($id, $database, $userCache);
}
?>"
maxlength="20" tabindex="1" /><br />
<!-- ======================================================
SUBJECT (reply logic păstrată 100%)
====================================================== -->
<input class="text" type="text" name="be" id="subject"
value="<?php
if (isset($message->reply['topic'])) {
if (preg_match("/re([0-9]+)/i", $message->reply['topic'], $c)) {
$c = $c[1] + 1;
echo strip_tags(preg_replace("/re[0-9]+/i", "re" . ($c), $message->reply['topic']));
} else {
echo "re1:" . strip_tags($message->reply['topic']);
}
}
?>"
maxlength="35" tabindex="2" />
</div>
<a id="adbook" href="#" onclick="toggleFriendsList(); return false;">
<img src="img/x.gif" alt="Addressbook" title="Addressbook" />
</a>
<div class="clear"></div>
<div class="line"></div>
<!-- ======================================================
MESSAGE AREA (NU MODIFICĂM BB EDITOR)
====================================================== -->
<div bbArea="message" id="message_container" name="message_container">
<div id="message_toolbar" name="message_toolbar">
<a href="javascript:void(0);" bbType="d" bbTag="b" ><div title="bold" alt="bold" class="bbButton bbBold"></div></a>
<a href="javascript:void(0);" bbType="d" bbTag="i" ><div title="italic" alt="italic" class="bbButton bbItalic"></div></a>
<a href="javascript:void(0);" bbType="d" bbTag="u" ><div title="underline" alt="underline" class="bbButton bbUnderscore"></div></a>
<a href="javascript:void(0);" bbType="d" bbTag="alliance0" ><div title="alliance" alt="alliance" class="bbButton bbAlliance"></div></a>
<a href="javascript:void(0);" bbType="d" bbTag="player0" ><div title="player" alt="player" class="bbButton bbPlayer"></div></a>
<a href="javascript:void(0);" bbType="d" bbTag="coor0" ><div title="coordinates" alt="coordinates" class="bbButton bbCoordinate" onclick="this.form.submit(); window.location.href = '?t=1&coor=<?php echo $coor+1; ?>';"></div></a>
<a href="javascript:void(0);" bbType="d" bbTag="report0" ><div title="report" alt="report" class="bbButton bbReport"></div></a>
<a href="javascript:void(0);" bbWin="resources" id="message_resourceButton"><div title="resources" alt="resources" class="bbButton bbResource"></div></a>
<a href="javascript:void(0);" bbWin="smilies" id="message_smilieButton"><div title="smilies" alt="smilies" class="bbButton bbSmilie"></div></a>
<a href="javascript:void(0);" bbWin="troops" id="message_troopButton"><div title="troops" alt="troops" class="bbButton bbTroop"></div></a>
<a href="javascript:void(0);" id="message_previewButton" bbArea="message">
<div title="preview" alt="preview" class="bbButton bbPreview"></div>
</a>
<div class="clear"></div>
<div id="message_toolbarWindows">
<div id="message_resources" name="message_resources"><a href="javascript:void(0);" bbType="o" bbTag="l" ><img src="img/x.gif" class="r1" title="Lumber" alt="Lumber" /></a><a href="javascript:void(0);" bbType="o" bbTag="cl" ><img src="img/x.gif" class="r2" title="Clay" alt="Clay" /></a><a href="javascript:void(0);" bbType="o" bbTag="i" ><img src="img/x.gif" class="r3" title="Iron" alt="Iron" /></a><a href="javascript:void(0);" bbType="o" bbTag="c" ><img src="img/x.gif" class="r4" title="Crop" alt="Crop" /></a></div>
<div id="message_smilies" name="message_smilies"><a href="javascript:void(0);" bbType="s" bbTag="*aha*" ><img class="smiley aha" src="img/x.gif" alt="*aha*" title="*aha*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*angry*" ><img class="smiley angry" src="img/x.gif" alt="*angry*" title="*angry*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*cool*" ><img class="smiley cool" src="img/x.gif" alt="*cool*" title="*cool*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*cry*" ><img class="smiley cry" src="img/x.gif" alt="*cry*" title="*cry*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*cute*" ><img class="smiley cute" src="img/x.gif" alt="*cute*" title="*cute*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*depressed*" ><img class="smiley depressed" src="img/x.gif" alt="*depressed*" title="*depressed*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*eek*" ><img class="smiley eek" src="img/x.gif" alt="*eek*" title="*eek*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*ehem*" ><img class="smiley ehem" src="img/x.gif" alt="*ehem*" title="*ehem*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*emotional*" ><img class="smiley emotional" src="img/x.gif" alt="*emotional*" title="*emotional*" /></a><a href="javascript:void(0);" bbType="s" bbTag=":D" ><img class="smiley grin" src="img/x.gif" alt=":D" title=":D" /></a><a href="javascript:void(0);" bbType="s" bbTag=":)" ><img class="smiley happy" src="img/x.gif" alt=":)" title=":)" /></a><a href="javascript:void(0);" bbType="s" bbTag="*hit*" ><img class="smiley hit" src="img/x.gif" alt="*hit*" title="*hit*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*hmm*" ><img class="smiley hmm" src="img/x.gif" alt="*hmm*" title="*hmm*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*hmpf*" ><img class="smiley hmpf" src="img/x.gif" alt="*hmpf*" title="*hmpf*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*hrhr*" ><img class="smiley hrhr" src="img/x.gif" alt="*hrhr*" title="*hrhr*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*huh*" ><img class="smiley huh" src="img/x.gif" alt="*huh*" title="*huh*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*lazy*" ><img class="smiley lazy" src="img/x.gif" alt="*lazy*" title="*lazy*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*love*" ><img class="smiley love" src="img/x.gif" alt="*love*" title="*love*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*nocomment*" ><img class="smiley nocomment" src="img/x.gif" alt="*nocomment*" title="*nocomment*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*noemotion*" ><img class="smiley noemotion" src="img/x.gif" alt="*noemotion*" title="*noemotion*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*notamused*" ><img class="smiley notamused" src="img/x.gif" alt="*notamused*" title="*notamused*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*pout*" ><img class="smiley pout" src="img/x.gif" alt="*pout*" title="*pout*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*redface*" ><img class="smiley redface" src="img/x.gif" alt="*redface*" title="*redface*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*rolleyes*" ><img class="smiley rolleyes" src="img/x.gif" alt="*rolleyes*" title="*rolleyes*" /></a><a href="javascript:void(0);" bbType="s" bbTag=":(" ><img class="smiley sad" src="img/x.gif" alt=":(" title=":(" /></a><a href="javascript:void(0);" bbType="s" bbTag="*shy*" ><img class="smiley shy" src="img/x.gif" alt="*shy*" title="*shy*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*smile*" ><img class="smiley smile" src="img/x.gif" alt="*smile*" title="*smile*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*tongue*" ><img class="smiley tongue" src="img/x.gif" alt="*tongue*" title="*tongue*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*veryangry*" ><img class="smiley veryangry" src="img/x.gif" alt="*veryangry*" title="*veryangry*" /></a><a href="javascript:void(0);" bbType="s" bbTag="*veryhappy*" ><img class="smiley veryhappy" src="img/x.gif" alt="*veryhappy*" title="*veryhappy*" /></a><a href="javascript:void(0);" bbType="s" bbTag=";)" ><img class="smiley wink" src="img/x.gif" alt=";)" title=";)" /></a></div>
<div id="message_troops" name="message_troops"><a href="javascript:void(0);" bbType="o" bbTag="tid1" ><img class="unit u1" src="img/x.gif" title="Legionnaire" alt="Legionnaire" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid2" ><img class="unit u2" src="img/x.gif" title="Praetorian" alt="Praetorian" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid3" ><img class="unit u3" src="img/x.gif" title="Imperian" alt="Imperian" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid4" ><img class="unit u4" src="img/x.gif" title="Equites Legati" alt="Equites Legati" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid5" ><img class="unit u5" src="img/x.gif" title="Equites Imperatoris" alt="Equites Imperatoris" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid6" ><img class="unit u6" src="img/x.gif" title="Equites Caesaris" alt="Equites Caesaris" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid7" ><img class="unit u7" src="img/x.gif" title="Battering Ram" alt="Battering Ram" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid8" ><img class="unit u8" src="img/x.gif" title="Fire Catapult" alt="Fire Catapult" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid9" ><img class="unit u9" src="img/x.gif" title="Senator" alt="Senator" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid10" ><img class="unit u10" src="img/x.gif" title="Settler" alt="Settler" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid11" ><img class="unit u11" src="img/x.gif" title="Clubswinger" alt="Clubswinger" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid12" ><img class="unit u12" src="img/x.gif" title="Spearman" alt="Spearman" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid13" ><img class="unit u13" src="img/x.gif" title="Axeman" alt="Axeman" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid14" ><img class="unit u14" src="img/x.gif" title="Scout" alt="Scout" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid15" ><img class="unit u15" src="img/x.gif" title="Paladin" alt="Paladin" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid16" ><img class="unit u16" src="img/x.gif" title="Teutonic Knight" alt="Teutonic Knight" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid17" ><img class="unit u17" src="img/x.gif" title="Ram" alt="Ram" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid18" ><img class="unit u18" src="img/x.gif" title="Catapult" alt="Catapult" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid19" ><img class="unit u19" src="img/x.gif" title="Chief" alt="Chief" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid20" ><img class="unit u20" src="img/x.gif" title="Settler" alt="Settler" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid21" ><img class="unit u21" src="img/x.gif" title="Phalanx" alt="Phalanx" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid22" ><img class="unit u22" src="img/x.gif" title="Swordsman" alt="Swordsman" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid23" ><img class="unit u23" src="img/x.gif" title="Pathfinder" alt="Pathfinder" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid24" ><img class="unit u24" src="img/x.gif" title="Theutates Thunder" alt="Theutates Thunder" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid25" ><img class="unit u25" src="img/x.gif" title="Druidrider" alt="Druidrider" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid26" ><img class="unit u26" src="img/x.gif" title="Haeduan" alt="Haeduan" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid27" ><img class="unit u27" src="img/x.gif" title="Ram" alt="Ram" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid28" ><img class="unit u28" src="img/x.gif" title="Trebuchet" alt="Trebuchet" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid29" ><img class="unit u29" src="img/x.gif" title="Chieftain" alt="Chieftain" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid30" ><img class="unit u30" src="img/x.gif" title="Settler" alt="Settler" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid31" ><img class="unit u31" src="img/x.gif" title="Rat" alt="Rat" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid32" ><img class="unit u32" src="img/x.gif" title="Spider" alt="Spider" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid33" ><img class="unit u33" src="img/x.gif" title="Snake" alt="Snake" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid34" ><img class="unit u34" src="img/x.gif" title="Bat" alt="Bat" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid35" ><img class="unit u35" src="img/x.gif" title="Wild Boar" alt="Wild Boar" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid36" ><img class="unit u36" src="img/x.gif" title="Wolf" alt="Wolf" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid37" ><img class="unit u37" src="img/x.gif" title="Bear" alt="Bear" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid38" ><img class="unit u38" src="img/x.gif" title="Crocodile" alt="Crocodile" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid39" ><img class="unit u39" src="img/x.gif" title="Tiger" alt="Tiger" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid40" ><img class="unit u40" src="img/x.gif" title="Elephant" alt="Elephant" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid41" ><img class="unit u41" src="img/x.gif" title="Pikeman" alt="Pikeman" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid42" ><img class="unit u42" src="img/x.gif" title="Thorned Warrior" alt="Thorned Warrior" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid43" ><img class="unit u43" src="img/x.gif" title="Guardsman" alt="Guardsman" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid44" ><img class="unit u44" src="img/x.gif" title="Birds Of Prey" alt="Birds Of Prey" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid45" ><img class="unit u45" src="img/x.gif" title="Axerider" alt="Axerider" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid46" ><img class="unit u46" src="img/x.gif" title="Natarian Knight" alt="Natarian Knight" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid47" ><img class="unit u47" src="img/x.gif" title="War Elephant" alt="War Elephant" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid48" ><img class="unit u48" src="img/x.gif" title="Ballista" alt="Ballista" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid49" ><img class="unit u49" src="img/x.gif" title="Natarian Emperor" alt="Natarian Emperor" /></a><a href="javascript:void(0);" bbType="o" bbTag="tid50" ><img class="unit u50" src="img/x.gif" title="Settler" alt="Settler" /></a><a href="javascript:void(0);" bbType="o" bbTag="hero" ><img class="unit uhero" src="img/x.gif" title="Hero" alt="Hero" /></a></div>
</div>
</div>
<div class="line bbLine"></div>
<textarea id="message" name="message" tabindex="3" class="textarea write message"><?php
if (isset($message->reply['message'])) {
echo "\n\n_________________________\nReply: "
. getCachedUsername($id, $database, $userCache)
. "\n"
. stripslashes($message->reply['message']);
}
?></textarea>
<div id="message_preview" class="message"></div>
</div>
<script>
var bbEditor = new BBEditor("message");
</script>
<p class="btn">
<input type="hidden" name="ft" value="m2" />
<button name="delmsg" id="btn_save" class="trav_buttons"
onclick="this.disabled=true;this.form.submit();" tabindex="4">Send</button>
<?php
// ======================================================
// ADMIN / MULTIHUNTER OPTIONS
// ======================================================
if ($session->access == ADMIN && ADMIN_RECEIVE_SUPPORT_MESSAGES && !empty($_GET['mid'])) {
?>
<br />
<input type="checkbox" name="as_support"
<?php echo ((!empty($_GET['tid']) && $_GET['tid'] == 1) ? 'checked="checked"' : ''); ?> />
Send as Support
<?php
} elseif ($session->access == MULTIHUNTER) {
?>
<br />
<input type="checkbox" name="as_multihunter"
<?php echo ((!empty($_GET['tid']) && $_GET['tid'] == 5) ? 'checked="checked"' : ''); ?> />
Send as Multihunter
<?php } ?>
</p>
</form>
<!-- ======================================================
ADDRESSBOOK (OPTIMIZAT CU CACHE)
====================================================== -->
<div id="adressbook" class="hide">
<h2>Addressbook</h2>
<form method="post" action="nachrichten.php">
<input type="hidden" name="ft" value="m7" />
<input type="hidden" name="myid" value="<?php echo (int)$session->uid; ?>" />
<table cellpadding="1" cellspacing="1" id="friendlist">
<?php
for ($i = 0; $i < 20; $i++) {
$friendId = (int)$user['friend' . $i];
$waitId = (int)$user['friend' . $i . 'wait'];
if ($friendId == 0 && $waitId == 0) {
if ($i % 2 == 0) echo "<tr>";
echo '<td class="end"></td>
<td class="pla">
<input class="text" type="text" name="addfriends'.$i.'" maxlength="20" />
</td>
<td class="on"></td>';
if ($i % 2 != 0) echo "</tr>";
} elseif ($waitId == 0) {
if ($i % 2 == 0) echo "<tr>";
$username = getCachedUsername($friendId, $database, $userCache);
$friend = $database->getUserArray($friendId, 1);
echo '<td class="end"><a href="nachrichten.php?delfriend='.$i.'">
<img class="del" src="img/x.gif" alt="delete"></a></td>
<td class="pla">
<a href="nachrichten.php?t=1&id='.$friendId.'">'.$username.'</a>
</td>';
// ONLINE STATUS (logică identică)
$time = time() - $friend['timestamp'];
if ($time < 600) {
echo "<td class=on><img class=online1 src=img/x.gif /></td>";
} elseif ($time < 86400) {
echo "<td class=on><img class=online2 src=img/x.gif /></td>";
} elseif ($time < 259200) {
echo "<td class=on><img class=online3 src=img/x.gif /></td>";
} elseif ($time < 604800) {
echo "<td class=on><img class=online4 src=img/x.gif /></td>";
} else {
echo "<td class=on><img class=online5 src=img/x.gif /></td>";
}
if ($i % 2 != 0) echo "</tr>";
} else {
// WAIT / CONFIRM logic (neatinsă)
$friend = $database->getUserArray($waitId, 1);
if ($i % 2 == 0) echo "<tr>";
echo '<td class="end"><a href="nachrichten.php?delfriend='.$i.'">
<img class="del" src="img/x.gif"></a></td>
<td class="pla">
<img src="../../'.GP_LOCATE.'img/a/clock-inactive.gif">
<a href="nachrichten.php?t=1&id='.$waitId.'">'
. getCachedUsername($waitId, $database, $userCache) .
'</a></td>
<td class="on"></td>';
if ($i % 2 != 0) echo "</tr>";
}
}
?>
</table>
<p class="btn">
<input type="image" id="btn_save" class="dynamic_img" src="img/x.gif" alt="save" />
</p>
</form>
<a href="#" onclick="closeFriendsList(); return false;">
<img src="img/x.gif" id="close" alt="close adressbook" />
</a>
</div>
</div>
<div id="write_foot" class="msg_foot"></div>
<br />
<span style="color: #DD0000">
<b>Warning:</b> you can't use the values <b>[message]</b> or <b>[/message]</b>
</span>
</div>