Now SMF 2.0.x and 2.1 Beta x have one tag for insert message, topic and board IDs.
One of my mods inserts in Moderation log an action when something is moved from message1 to message2 and uses this:
<?php
// Language string.
$txt['modlog_ac_mymod_move'] = 'Moved the "{something}" by "{member}" from "{topic}" to "{topic2}"';
// Action logged to Moderation log.
$request = $smcFunc['db_query']('', '
SELECT subject
FROM {db_prefix}topics AS t
INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg)
WHERE t.id_topic = {int:id_topic}',
array(
'id_topic' => $topic_to,
)
);
$row = $smcFunc['db_fetch_assoc']($request);
$topic2 = '<a href="' . $scripturl . '?topic=' . $topic_to . '.msg' . $msg_to . '#msg' . $msg_to . '">' . $row['subject'] . '</a>';
$smcFunc['db_free_result']($request);
logAction('mymod_move', array('something' => $something_name, 'member' => $user_info['id'], 'message' => $msg_from, 'topic' => $topic_from, 'message2' => $msg_to, 'topic2' => $topic2));
?>
Can be added more tags to array extra?
- message2, message3,...
- topic2, topic3,...
- board2, board3,...
For example, in SMF 2.1 (GitHub version):
<?php
if (isset($log['extra']['member_affected']))
$memID = $log['extra']['member_affected'];
else
$memID = $user_info['id'];
?>
<?php
$fields = array('message', 'topic', 'board');
foreach ($fields as $field)
{
for ($i = 2; isset($log['extra'][$field . $i]); $i++)
{
if (!is_numeric($log['extra'][$field . $i]))
{
trigger_error('logActions(): data\'s ' . $field . $i . ' is not a number', E_USER_NOTICE);
unset($log['extra'][$field . $i]);
break;
}
}
}
?>
<?php
// A message?
if (isset($row['extra']['message']))
$messages[(int) $row['extra']['message']][] = $row['id_action'];
?>
<?php
// More messages, topics and boards.
$fields = array('message', 'topic', 'board');
foreach ($fields as $field => $var)
{
$var = $field . 's';
for ($i = 2; isset($row['extra'][$field . $i]); $i++)
$$var[(int) $row['extra'][$field . $i]][] = $row['id_action'];
}
?>
<?php
// Make the board number into a link - dealing with moving too.
if (isset($entries[$action]['extra']['board_to']) && $entries[$action]['extra']['board_to'] == $row['id_board'])
$entries[$action]['extra']['board_to'] = '<a href="' . $scripturl . '?board=' . $row['id_board'] . '.0">' . $row['name'] . '</a>';
elseif (isset($entries[$action]['extra']['board_from']) && $entries[$action]['extra']['board_from'] == $row['id_board'])
$entries[$action]['extra']['board_from'] = '<a href="' . $scripturl . '?board=' . $row['id_board'] . '.0">' . $row['name'] . '</a>';
elseif (isset($entries[$action]['extra']['board']) && $entries[$action]['extra']['board'] == $row['id_board'])
$entries[$action]['extra']['board'] = '<a href="' . $scripturl . '?board=' . $row['id_board'] . '.0">' . $row['name'] . '</a>';
?>
<?php
else
{
for ($i = 2; isset($entries[$action]['extra']['board' . $i]); $i++)
{
if ($entries[$action]['extra']['board' . $i] == $row['id_board'])
{
$entries[$action]['extra']['board' . $i] = '<a href="' . $scripturl . '?board=' . $row['id_board'] . '.0">' . $row['name'] . '</a>';
break;
}
}
}
?>
<?php
// Make the topic number into a link - dealing with splitting too.
if (isset($this_action['extra']['topic']) && $this_action['extra']['topic'] == $row['id_topic'])
$this_action['extra']['topic'] = '<a href="' . $scripturl . '?topic=' . $row['id_topic'] . '.' . (isset($this_action['extra']['message']) ? 'msg' . $this_action['extra']['message'] . '#msg' . $this_action['extra']['message'] : '0') . '">' . $row['subject'] . '</a>';
elseif (isset($this_action['extra']['new_topic']) && $this_action['extra']['new_topic'] == $row['id_topic'])
$this_action['extra']['new_topic'] = '<a href="' . $scripturl . '?topic=' . $row['id_topic'] . '.' . (isset($this_action['extra']['message']) ? 'msg' . $this_action['extra']['message'] . '#msg' . $this_action['extra']['message'] : '0') . '">' . $row['subject'] . '</a>';
?>
<?php
else
{
for ($i = 2; isset($this_action['extra']['topic' . $i]); $i++)
{
if ($this_action['extra']['topic' . $i] == $row['id_topic'])
{
$this_action['extra']['topic' . $i] = '<a href="' . $scripturl . '?topic=' . $row['id_topic'] . '.' . (isset($this_action['extra']['message' . $i]) ? 'msg' . $this_action['extra']['message' . $i] . '#msg' . $this_action['extra']['message' . $i] : '0') . '">' . $row['subject'] . '</a>';
break;
}
}
}
?>
<?php
// Make the message number into a link.
if (isset($this_action['extra']['message']) && $this_action['extra']['message'] == $row['id_msg'])
$this_action['extra']['message'] = '<a href="' . $scripturl . '?msg=' . $row['id_msg'] . '">' . $row['subject'] . '</a>';
?>
<?php
else
{
for ($i = 2; isset($this_action['extra']['message' . $i]); $i++)
{
if ($this_action['extra']['message' . $i] == $row['id_msg'])
{
$this_action['extra']['message' . $i] = '<a href="' . $scripturl . '?msg=' . $row['id_msg'] . '">' . $row['subject'] . '</a>';
break;
}
}
}
?>
At this point, I would say that this is beyond the scope of what remains to be done - we are working on getting an RC ready and there has to be a moratorium on new code and code changes at some point.