/**
* Specific discussion post-save behaviors.
*/
protected function _discussionPostSave(array $messages)
{
$threadId = $this->get('thread_id');
if ($this->isUpdate() && $this->isChanged('discussion_state') && $this->get('discussion_state') != 'visible')
{
$this->_deleteRedirects('thread-' . $threadId . '-%', true);
}
else if ($this->isUpdate() && $this->isChanged('node_id'))
{
if ($this->get('discussion_type') == 'redirect')
{
$threadRedirectModel = $this->getModelFromCache('XenForo_Model_ThreadRedirect');
$redirect = $threadRedirectModel->getThreadRedirectById($threadId);
if ($redirect && $redirect['redirect_key'])
{
$redirectKey = preg_replace('/^(thread-\d+)-(\d+)$/', '$1-' . $this->get('node_id'), $redirect['redirect_key']);
if ($redirectKey != $redirect['redirect_key'])
{
$threadRedirectModel->updateThreadRedirect($this->get('thread_id'), array('redirect_key' => $redirectKey));
}
}
}
else
{
// delete redirects if moving back to forum that already had it
$this->_deleteRedirects('thread-' . $threadId . '-' . $this->get('node_id') . '-');
}
}
if ($this->isUpdate() && $this->isChanged('discussion_open'))
{
$threadRedirectModel = $this->getModelFromCache('XenForo_Model_ThreadRedirect');
$redirectThreadIds = array();
$threadRedirects = $threadRedirectModel->getThreadRedirectsByKey('thread-' . $threadId . '-%', true);
foreach ($threadRedirects AS $threadRedirect)
{
$redirectThreadIds[] = $threadRedirect['thread_id'];
}
if ($redirectThreadIds)
{
$db = $this->_db;
$db->update('xf_thread',
array('discussion_open' => $this->get('discussion_open')),
'thread_id IN (' . $db->quote($redirectThreadIds) . ')'
);
}
}
if ($this->isUpdate() && $this->get('discussion_state') == 'visible' && $this->isChanged('node_id'))
{
$indexer = new XenForo_Search_Indexer();
$messageHandler = $this->_messageDefinition->getSearchDataHandler();
if ($messageHandler)
{
$thread = $this->getMergedData();
$fullMessages = $this->_getMessagesInDiscussionSimple(true); // re-get with message contents
foreach ($fullMessages AS $key => $message)
{
$messageHandler->insertIntoIndex($indexer, $message, $thread);
unset($fullMessages[$key]);
}
}
$this->_handleForumMove($messages, $this->getExisting('node_id'), $this->get('node_id'));
}
}