Merge pull request #15987 from seamuslee001/master_metadata
[civicrm-core.git] / CRM / Activity / BAO / ActivityAssignment.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
5 | |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
10 */
11
12 /**
13 *
14 * @package CRM
15 * @copyright CiviCRM LLC https://civicrm.org/licensing
16 */
17
18 /**
19 * This class is for activity assignment functions.
20 */
21 class CRM_Activity_BAO_ActivityAssignment extends CRM_Activity_DAO_ActivityContact {
22
23 /**
24 * Class constructor.
25 */
26 public function __construct() {
27 parent::__construct();
28 }
29
30 /**
31 * Add activity assignment.
32 *
33 * @param array $params
34 * (reference ) an assoc array of name/value pairs.
35 *
36 * @return object
37 * activity type of object that is added
38 */
39 public static function create(&$params) {
40 $assignment = new CRM_Activity_BAO_ActivityContact();
41 $activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate');
42 $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
43
44 $assignment->copyValues($params);
45 $assignment->record_type_id = $assigneeID;
46
47 return $assignment->save();
48 }
49
50 /**
51 * Retrieve assignee_id by activity_id.
52 *
53 * @param int $activity_id
54 *
55 * @return array
56 */
57 public static function retrieveAssigneeIdsByActivityId($activity_id) {
58 $assigneeArray = [];
59 if (!CRM_Utils_Rule::positiveInteger($activity_id)) {
60 return $assigneeArray;
61 }
62
63 $activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate');
64 $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
65
66 $sql = "
67 SELECT contact_id
68 FROM civicrm_activity_contact
69 INNER JOIN civicrm_contact ON contact_id = civicrm_contact.id
70 WHERE activity_id = %1
71 AND record_type_id = $assigneeID
72 AND civicrm_contact.is_deleted = 0
73 ";
74 $assignment = CRM_Core_DAO::executeQuery($sql, [
75 1 => [
76 $activity_id,
77 'Integer',
78 ],
79 ]);
80 while ($assignment->fetch()) {
81 $assigneeArray[] = $assignment->contact_id;
82 }
83
84 return $assigneeArray;
85 }
86
87 /**
88 * Retrieve assignee names by activity_id.
89 *
90 * @param array $activityIDs
91 * IDs of the activities.
92 * @param bool $isDisplayName
93 * If set returns display names of assignees.
94 * @param bool $skipDetails
95 * If false returns all details of assignee contact.
96 *
97 * @return array
98 */
99 public static function getAssigneeNames($activityIDs, $isDisplayName = FALSE, $skipDetails = TRUE) {
100 $assigneeNames = [];
101 if (empty($activityIDs)) {
102 return $assigneeNames;
103 }
104 $activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate');
105 $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
106
107 $whereClause = "";
108 if (!$skipDetails) {
109 $whereClause = " AND ce.is_primary= 1";
110 }
111 $inClause = implode(",", $activityIDs);
112
113 $query = "
114 SELECT contact_a.id, contact_a.sort_name, contact_a.display_name, ce.email,
115 civicrm_activity_contact.activity_id
116 FROM civicrm_contact contact_a
117 INNER JOIN civicrm_activity_contact ON civicrm_activity_contact.contact_id = contact_a.id
118 LEFT JOIN civicrm_email ce ON ce.contact_id = contact_a.id
119 WHERE civicrm_activity_contact.activity_id IN ( $inClause )
120 AND contact_a.is_deleted = 0
121 AND civicrm_activity_contact.record_type_id = $assigneeID
122 {$whereClause}
123 ";
124
125 $dao = CRM_Core_DAO::executeQuery($query);
126 while ($dao->fetch()) {
127 if (!$isDisplayName) {
128 $assigneeNames[$dao->id] = $dao->sort_name;
129 }
130 else {
131 if ($skipDetails) {
132 $assigneeNames[$dao->id] = $dao->display_name;
133 }
134 else {
135 $assigneeNames[$dao->id]['contact_id'] = $dao->id;
136 $assigneeNames[$dao->id]['display_name'] = $dao->display_name;
137 $assigneeNames[$dao->id]['sort_name'] = $dao->sort_name;
138 $assigneeNames[$dao->id]['email'] = $dao->email;
139 $assigneeNames[$dao->id]['role'] = ts('Activity Assignee');
140 $assigneeNames[$dao->id]['activity_id'] = $dao->activity_id;
141 }
142 }
143 }
144 return $assigneeNames;
145 }
146
147 }