Example #1
0
	/**
	 * 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