/** * Initialize the thread order column. This column is used for * displaying the messages in threaded order without having to do any * recursive queries or function calls. * * @return void */ private function __initThreadOrder() { global $g_ado_db; if ($this->m_data['message_id'] == $this->m_data['thread']) { $this->setProperty('thread_order', 0); return; } if ($this->m_data['parent_id'] == 0) { $sql = 'SELECT max(thread_order) FROM ' . $this->m_dbTableName . ' ' . 'WHERE thread = ' . $this->m_data['thread']; $orderNr = $g_ado_db->GetOne($sql) + 1; } else { $nextOrderNr = null; $parentId = $this->m_data['parent_id']; do { $orderNr = $nextOrderNr; $sql = 'SELECT max(thread_order) as order_nr, max(message_id) as max_message_id ' . 'FROM ' . $this->m_dbTableName . ' ' . 'WHERE parent_id = ' . $parentId . ' AND message_id != ' . $this->m_data['message_id']; $row = $g_ado_db->GetRow($sql); $nextOrderNr = $row['order_nr']; $parentId = $row['max_message_id']; } while (!is_null($parentId)); if (is_null($orderNr)) { $tmpMsg = new Phorum_message($this->m_data['parent_id']); $orderNr = $tmpMsg->getProperty('thread_order'); } $orderNr++; } $sql = 'UPDATE ' . $this->m_dbTableName . ' SET thread_order = thread_order + 1 ' . 'WHERE thread = ' . $this->m_data['thread'] . ' AND thread_order >= ' . $orderNr; $g_ado_db->Execute($sql); $this->setProperty('thread_order', $orderNr); } // fn __initThreadOrder