/** * This will refresh all the stats (last post date, message/topic counts) and save the record to the database * @return void */ public function RefreshStats() { $objMessage = Message::QuerySingle(QQ::Equal(QQN::Message()->TopicLinkId, $this->intId), QQ::Clause(QQ::OrderBy(QQN::Message()->PostDate, false), QQ::LimitInfo(1))); if ($objMessage) { $this->dttLastPostDate = $objMessage->PostDate; } else { $this->dttLastPostDate = null; } $this->intMessageCount = Message::CountByTopicLinkId($this->intId); $this->intTopicCount = Topic::CountByTopicLinkId($this->intId); $this->Save(); }
/** * Count Messages * by PersonId Index(es) * @param integer $intPersonId * @return int */ public static function CountByPersonId($intPersonId) { // Call Message::QueryCount to perform the CountByPersonId query return Message::QueryCount(QQ::Equal(QQN::Message()->PersonId, $intPersonId)); }
<?php require '../../includes/prepend.inc.php'; $objRss = new QRssFeed('Qcodo.com RSS Feed', 'http://www.qcodo.com/', 'The Qcodo Development Framework is an open-source PHP framework that focuses on freeing developers from unnecessary tedious, mundane coding. ' . 'This RSS feed reports on the most recent activity, posts and community contributions to the framework via the Qcodo.com website.'); $objRss->Image = new QRssImage('http://www.qcodo.com/images/qcodo_smaller.png'); $objRss->PubDate = new QDateTime(QDateTime::Now); $objMessageArray = Message::QueryArray(QQ::Equal(QQN::Message()->Topic->TopicLink->TopicLinkTypeId, TopicLinkType::Forum), QQ::Clause(QQ::OrderBy(QQN::Message()->PostDate, false), QQ::LimitInfo(25))); $objMessageArray = Message::LoadAll(QQ::Clause(QQ::OrderBy(QQN::Message()->PostDate, false), QQ::LimitInfo(25))); foreach ($objMessageArray as $objMessage) { $objTopic = $objMessage->Topic; $strTitle = ($objTopic->CountMessages() > 1 ? 'Re: ' : '') . $objTopic->Name; $strLink = 'http://www.qcodo.com' . $objTopic->LinkLastPage; $strDescription = $objMessage->CompiledHtml; switch ($objTopic->TopicLink->TopicLinkTypeId) { case TopicLinkType::Forum: $strTitle = '[Forums] ' . $strTitle; break; case TopicLinkType::Issue: $strTitle = '[Issue] ' . $strTitle; break; case TopicLinkType::Package: $strTitle = '[QPM] ' . $strTitle; break; case TopicLinkType::WikiItem: $strTitle = '[Wiki] ' . $strTitle; break; } $objItem = new QRssItem($strTitle, $strLink, $strDescription); $objItem->Author = $objMessage->Person ? $objMessage->Person->DisplayName : 'Qcodo System Message'; $objItem->Comments = $objItem->Link; $objItem->PubDate = $objMessage->PostDate;
$objTopic->Name = $objRow['name']; $objTopic->PersonId = $objRow['person_id']; $objTopic->Save(); if ($objTopic->Id != $objRow['id']) { Topic::GetDatabase()->NonQuery('UPDATE topic SET id=' . $objRow['id'] . ' WHERE id=' . $objTopic->Id); Topic::GetDatabase()->NonQuery('ALTER TABLE topic AUTO_INCREMENT=' . ($objTopic->Id + 1)); } } $objResult = $objDb->query('SELECT * FROM message ORDER BY id'); while (QDataGen::DisplayWhileTask('Migrating Messages', $objResult->num_rows)) { $objRow = $objResult->fetch_array(); $objMessage = new Message(); $objMessage->TopicLinkId = $objRow['forum_id'] - 1; $objMessage->TopicId = $objRow['topic_id']; $objMessage->PersonId = $objRow['person_id']; $objMessage->ReplyNumber = Message::QueryCount(QQ::Equal(QQN::Message()->TopicId, $objRow['topic_id'])) + 1; $objMessage->PostDate = new QDateTime($objRow['post_date']); $strContent = $objRow['message']; $strContent = str_replace("\r\n", "\n", $strContent); $strContent = str_replace("\n", "\r\n", $strContent); $strContent = str_replace('<b>', '*', $strContent); $strContent = str_replace('</b>', '*', $strContent); $strContent = str_replace('<i>', '+', $strContent); $strContent = str_replace('</i>', '+', $strContent); $strContent = str_replace('<u>', '_', $strContent); $strContent = str_replace('</u>', '_', $strContent); while (strpos($strContent, "\r\n<code>") !== false) { $strContent = str_replace("\r\n<code>", '<code>', $strContent); } while (strpos($strContent, "<code>\r\n") !== false) { $strContent = str_replace("<code>\r\n", '<code>', $strContent);
public function SelectTopic(Topic $objTopic) { $this->objTopic = $objTopic; if ($this->objTopic) { // View Buttons $this->btnRespond1->Visible = true; $this->btnRespond2->Visible = true; $this->btnMarkAsViewed1->Visible = true; $this->btnMarkAsViewed2->Visible = true; $this->btnNotify1->Visible = true; $this->btnNotify2->Visible = true; $objFirstMessage = Message::QuerySingle(QQ::Equal(QQN::Message()->TopicId, $this->objTopic->Id), QQ::OrderBy(QQN::Message()->Id)); if ($objFirstMessage) { $dttLocalize = QApplication::LocalizeDateTime($objFirstMessage->PostDate); $this->strPostStartedLinkText = strtolower($dttLocalize->__toString('DDDD, MMMM D, YYYY, h:mm z ')) . strtolower(QApplication::DisplayTimezoneLink($dttLocalize, false)); } else { $this->strPostStartedLinkText = 'none'; } $this->UpdateNotifyButtons(); $this->UpdateMarkAsViewedButtons(); } else { // Hide Buttons $this->btnRespond1->Visible = false; $this->btnRespond2->Visible = false; $this->btnMarkAsViewed1->Visible = false; $this->btnMarkAsViewed2->Visible = false; $this->btnNotify1->Visible = false; $this->btnNotify2->Visible = false; } }
/** * This will refresh the search index for this topic (for all message content under this topic) * @param Zend_Search_Lucene $objIndex should be null if we are updating just one -- but for bulk index updates, you can pass in an already loaded index file * @return void */ public function RefreshSearchIndex($objIndex = null) { // Currently only implemented for Forum-based topic/message searches if ($this->TopicLink->TopicLinkTypeId != TopicLinkType::Forum) { return; } if (!$objIndex) { $objIndex = new Zend_Search_Lucene(__SEARCH_INDEXES__ . '/topics'); $blnIndexProvided = false; } else { $blnIndexProvided = true; } // Retrievew the Index Documents (if applicable) to delete them from the index $objSearchTerm = new Zend_Search_Lucene_Index_Term($this->Id, 'db_id'); foreach ($objIndex->termDocs($objSearchTerm) as $intDocId) { $objIndex->delete($intDocId); } // Create the Message Contents for this Topic $strContents = null; foreach ($this->GetMessageArray(QQ::OrderBy(QQN::Message()->ReplyNumber)) as $objMessage) { $strMessage = strip_tags(trim($objMessage->CompiledHtml)); $strMessage = html_entity_decode($strMessage, ENT_QUOTES, 'UTF-8'); $strContents .= $strMessage . "\r\n\r\n"; } // Create the Document $objDocument = new Zend_Search_Lucene_Document(); $objDocument->addField(Zend_Search_Lucene_Field::Keyword('db_id', $this->Id)); $objDocument->addField(Zend_Search_Lucene_Field::UnIndexed('topic_link_id', $this->TopicLinkId)); $objDocument->addField(Zend_Search_Lucene_Field::UnIndexed('topic_link_type_id', $this->TopicLink->TopicLinkTypeId)); $objDocument->addField(Zend_Search_Lucene_Field::UnIndexed('message_count', $this->MessageCount)); $objDocument->addField(Zend_Search_Lucene_Field::UnIndexed('last_post_date', $this->LastPostDate->Timestamp)); $objDocument->addField(Zend_Search_Lucene_Field::Text('title', $this->Name)); $objDocument->addField(Zend_Search_Lucene_Field::UnStored('contents', trim($strContents))); // Add Document to Index $objIndex->addDocument($objDocument); // Only call commit on the index if it was provided for us if (!$blnIndexProvided) { $objIndex->commit(); } }
/** * Used internally by the Meta-based Add Column tools. * * Given a QQNode or a Text String, this will return a Message-based QQNode. * It will also verify that it is a proper Message-based QQNode, and will throw an exception otherwise. * * @param mixed $mixContent * @return QQNode */ protected function ResolveContentItem($mixContent) { if ($mixContent instanceof QQNode) { if (!$mixContent->_ParentNode) { throw new QCallerException('Content QQNode cannot be a Top Level Node'); } if ($mixContent->_RootTableName == 'message') { if ($mixContent instanceof QQReverseReferenceNode && !$mixContent->_PropertyName) { throw new QCallerException('Content QQNode cannot go through any "To Many" association nodes.'); } $objCurrentNode = $mixContent; while ($objCurrentNode = $objCurrentNode->_ParentNode) { if (!$objCurrentNode instanceof QQNode) { throw new QCallerException('Content QQNode cannot go through any "To Many" association nodes.'); } if ($objCurrentNode instanceof QQReverseReferenceNode && !$objCurrentNode->_PropertyName) { throw new QCallerException('Content QQNode cannot go through any "To Many" association nodes.'); } } return $mixContent; } else { throw new QCallerException('Content QQNode has a root table of "' . $mixContent->_RootTableName . '". Must be a root of "message".'); } } else { if (is_string($mixContent)) { switch ($mixContent) { case 'Id': return QQN::Message()->Id; case 'TopicId': return QQN::Message()->TopicId; case 'Topic': return QQN::Message()->Topic; case 'TopicLinkId': return QQN::Message()->TopicLinkId; case 'TopicLink': return QQN::Message()->TopicLink; case 'PersonId': return QQN::Message()->PersonId; case 'Person': return QQN::Message()->Person; case 'Message': return QQN::Message()->Message; case 'CompiledHtml': return QQN::Message()->CompiledHtml; case 'ReplyNumber': return QQN::Message()->ReplyNumber; case 'PostDate': return QQN::Message()->PostDate; default: throw new QCallerException('Simple Property not found in MessageDataGrid content: ' . $mixContent); } } else { if ($mixContent instanceof QQAssociationNode) { throw new QCallerException('Content QQNode cannot go through any "To Many" association nodes.'); } else { throw new QCallerException('Invalid Content type'); } } } }
<?php require '../../includes/prepend.inc.php'; $objRss = new QRssFeed('Qcodo.com Forums RSS Feed', 'http://www.qcodo.com/forums/', 'The Qcodo forums attempts to provide a community to post, discuss, ask, and converse about the current state of the framework, as well as provide an opportunity for members to discuss the future direction of Qcodo.'); $objRss->Image = new QRssImage('http://www.qcodo.com/images/qcodo_smaller.png'); $objRss->PubDate = new QDateTime(QDateTime::Now); $objMessageArray = Message::QueryArray(QQ::Equal(QQN::Message()->Topic->TopicLink->TopicLinkTypeId, TopicLinkType::Forum), QQ::Clause(QQ::OrderBy(QQN::Message()->PostDate, false), QQ::LimitInfo(25))); foreach ($objMessageArray as $objMessage) { $objTopic = $objMessage->Topic; $strTitle = ($objTopic->CountMessages() > 1 ? 'Re: ' : '') . $objTopic->Name; $strLink = 'http://www.qcodo.com/forums/forum.php/' . $objTopic->TopicLink->ForumId . '/' . $objTopic->Id . '/lastpage'; $strDescription = $objMessage->CompiledHtml; $objItem = new QRssItem($strTitle, $strLink, $strDescription); $objItem->Author = $objMessage->Person->DisplayName; $objItem->Comments = $objItem->Link; $objItem->PubDate = $objMessage->PostDate; $objItem->Guid = $objItem->Link; $objItem->GuidPermaLink = true; $objItem->AddCategory(new QRssCategory($objTopic->TopicLink->Forum->Name)); $objRss->AddItem($objItem); } $objRss->Run();