Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/conpherence/engineextension/ConpherenceThreadIndexEngineExtension.php
12256 views
1
<?php
2
3
final class ConpherenceThreadIndexEngineExtension
4
extends PhabricatorIndexEngineExtension {
5
6
const EXTENSIONKEY = 'conpherence.thread';
7
8
public function getExtensionName() {
9
return pht('Conpherence Threads');
10
}
11
12
public function shouldIndexObject($object) {
13
return ($object instanceof ConpherenceThread);
14
}
15
16
public function indexObject(
17
PhabricatorIndexEngine $engine,
18
$object) {
19
20
$force = $this->shouldForceFullReindex();
21
22
if (!$force) {
23
$xaction_phids = $this->getParameter('transactionPHIDs');
24
if (!$xaction_phids) {
25
return;
26
}
27
}
28
29
$query = id(new ConpherenceTransactionQuery())
30
->setViewer($this->getViewer())
31
->withObjectPHIDs(array($object->getPHID()))
32
->withTransactionTypes(array(PhabricatorTransactions::TYPE_COMMENT))
33
->needComments(true);
34
35
if (!$force) {
36
$query->withPHIDs($xaction_phids);
37
}
38
39
$xactions = $query->execute();
40
41
if (!$xactions) {
42
return;
43
}
44
45
foreach ($xactions as $xaction) {
46
$this->indexComment($object, $xaction);
47
}
48
}
49
50
private function indexComment(
51
ConpherenceThread $thread,
52
ConpherenceTransaction $xaction) {
53
54
$pager = id(new AphrontCursorPagerView())
55
->setPageSize(1)
56
->setAfterID($xaction->getID());
57
58
$previous_xactions = id(new ConpherenceTransactionQuery())
59
->setViewer($this->getViewer())
60
->withObjectPHIDs(array($thread->getPHID()))
61
->withTransactionTypes(array(PhabricatorTransactions::TYPE_COMMENT))
62
->executeWithCursorPager($pager);
63
$previous = head($previous_xactions);
64
65
$index = id(new ConpherenceIndex())
66
->setThreadPHID($thread->getPHID())
67
->setTransactionPHID($xaction->getPHID())
68
->setPreviousTransactionPHID($previous ? $previous->getPHID() : null)
69
->setCorpus($xaction->getComment()->getContent());
70
71
queryfx(
72
$index->establishConnection('w'),
73
'INSERT INTO %T
74
(threadPHID, transactionPHID, previousTransactionPHID, corpus)
75
VALUES (%s, %s, %ns, %s)
76
ON DUPLICATE KEY UPDATE corpus = VALUES(corpus)',
77
$index->getTableName(),
78
$index->getThreadPHID(),
79
$index->getTransactionPHID(),
80
$index->getPreviousTransactionPHID(),
81
$index->getCorpus());
82
}
83
84
}
85
86