Commit | Line | Data |
---|---|---|
11626cf1 TO |
1 | <?php |
2 | ||
3 | /** | |
4 | * Description of a one-way link between two entities | |
5 | * | |
6 | * This is a generic, soft-foreign key based on a pair of columns (entity_id, entity_table). | |
7 | */ | |
8 | class CRM_Core_Reference_Dynamic extends CRM_Core_Reference_Basic { | |
9 | ||
a0ee3941 EM |
10 | /** |
11 | * @param string $tableName | |
12 | * | |
13 | * @return bool | |
14 | */ | |
11626cf1 TO |
15 | public function matchesTargetTable($tableName) { |
16 | return TRUE; | |
17 | } | |
18 | ||
19 | /** | |
d09edf64 | 20 | * Create a query to find references to a particular record. |
11626cf1 | 21 | * |
6a0b768e TO |
22 | * @param CRM_Core_DAO $targetDao |
23 | * The instance for which we want references. | |
16b10e64 CW |
24 | * @return CRM_Core_DAO |
25 | * a query-handle (like the result of CRM_Core_DAO::executeQuery) | |
11626cf1 TO |
26 | */ |
27 | public function findReferences($targetDao) { | |
28 | $refColumn = $this->getReferenceKey(); | |
29 | $targetColumn = $this->getTargetKey(); | |
30 | ||
be2fb01f CW |
31 | $params = [ |
32 | 1 => [$targetDao->$targetColumn, 'String'], | |
11626cf1 TO |
33 | // If anyone complains about $targetDao::getTableName(), then could use |
34 | // "{get_class($targetDao)}::getTableName();" | |
be2fb01f CW |
35 | 2 => [$targetDao::getTableName(), 'String'], |
36 | ]; | |
11626cf1 TO |
37 | |
38 | $sql = <<<EOS | |
39 | SELECT id | |
40 | FROM {$this->getReferenceTable()} | |
41 | WHERE {$refColumn} = %1 | |
42 | AND {$this->getTypeColumn()} = %2 | |
43 | EOS; | |
44 | ||
45 | $daoName = CRM_Core_DAO_AllCoreTables::getClassForTable($this->getReferenceTable()); | |
46 | $result = CRM_Core_DAO::executeQuery($sql, $params, TRUE, $daoName); | |
47 | return $result; | |
48 | } | |
1256c139 | 49 | |
a0ee3941 EM |
50 | /** |
51 | * @param CRM_Core_DAO $targetDao | |
52 | * | |
53 | * @return array | |
54 | */ | |
1256c139 TO |
55 | public function getReferenceCount($targetDao) { |
56 | $targetColumn = $this->getTargetKey(); | |
be2fb01f CW |
57 | $params = [ |
58 | 1 => [$targetDao->$targetColumn, 'String'], | |
1256c139 TO |
59 | // If anyone complains about $targetDao::getTableName(), then could use |
60 | // "{get_class($targetDao)}::getTableName();" | |
be2fb01f CW |
61 | 2 => [$targetDao::getTableName(), 'String'], |
62 | ]; | |
1256c139 TO |
63 | |
64 | $sql = <<<EOS | |
65 | SELECT count(id) | |
66 | FROM {$this->getReferenceTable()} | |
67 | WHERE {$this->getReferenceKey()} = %1 | |
68 | AND {$this->getTypeColumn()} = %2 | |
69 | EOS; | |
70 | ||
be2fb01f CW |
71 | return [ |
72 | 'name' => implode(':', ['sql', $this->getReferenceTable(), $this->getReferenceKey()]), | |
1256c139 TO |
73 | 'type' => get_class($this), |
74 | 'table' => $this->getReferenceTable(), | |
75 | 'key' => $this->getReferenceKey(), | |
21dfd5f5 | 76 | 'count' => CRM_Core_DAO::singleValueQuery($sql, $params), |
be2fb01f | 77 | ]; |
1256c139 TO |
78 | } |
79 | ||
11626cf1 | 80 | } |