3 * To change this license header, choose License Headers in Project Properties.
4 * To change this template file, choose Tools | Templates
5 * and open the template in the editor.
9 * Description of Repeat
13 class CRM_Event_Form_ManageEvent_Repeat
extends CRM_Event_Form_ManageEvent
{
16 * Parent Event Start Date.
19 protected $_parentEventStartDate = NULL;
22 * Parent Event End Date.
25 protected $_parentEventEndDate = NULL;
27 public function preProcess() {
29 $this->setSelectedChild('repeat');
30 $this->assign('currentEventId', $this->_id
);
32 $checkParentExistsForThisId = CRM_Core_BAO_RecurringEntity
::getParentFor($this->_id
, 'civicrm_event');
33 //If this ID has parent, send parent id
34 if ($checkParentExistsForThisId) {
36 * Get connected event information list
38 //Get all connected event ids
39 $allEventIdsArray = CRM_Core_BAO_RecurringEntity
::getEntitiesForParent($checkParentExistsForThisId, 'civicrm_event');
41 if (!empty($allEventIdsArray)) {
42 foreach ($allEventIdsArray as $key => $val) {
43 $allEventIds[] = $val['id'];
45 if (!empty($allEventIds)) {
50 WHERE id IN (" . implode(",", $allEventIds) . ")
51 ORDER BY start_date asc
54 $dao = CRM_Core_DAO
::executeQuery($query, $params, TRUE, 'CRM_Event_DAO_Event');
55 $permissions = CRM_Event_BAO_Event
::checkPermission();
56 while ($dao->fetch()) {
57 if (in_array($dao->id
, $permissions[CRM_Core_Permission
::VIEW
])) {
58 $manageEvent[$dao->id
] = [];
59 CRM_Core_DAO
::storeValues($dao, $manageEvent[$dao->id
]);
63 $this->assign('rows', $manageEvent);
67 $parentEventParams = ['id' => $this->_id
];
68 $parentEventValues = [];
69 $parentEventReturnProperties = ['start_date', 'end_date'];
70 $parentEventAttributes = CRM_Core_DAO
::commonRetrieve('CRM_Event_DAO_Event', $parentEventParams, $parentEventValues, $parentEventReturnProperties);
71 $this->_parentEventStartDate
= $parentEventAttributes->start_date
;
72 $this->_parentEventEndDate
= $parentEventAttributes->end_date
;
76 * Set default values for the form. For edit/view mode
77 * the default values are retrieved from the database
82 public function setDefaultValues() {
85 //Always pass current event's start date by default
86 $defaults['repetition_start_date'] = CRM_Core_DAO
::getFieldValue('CRM_Event_DAO_Event', $this->_id
, 'start_date', 'id');
87 $recurringEntityDefaults = CRM_Core_Form_RecurringEntity
::setDefaultValues();
88 return array_merge($defaults, $recurringEntityDefaults);
91 public function buildQuickForm() {
92 CRM_Core_Form_RecurringEntity
::buildQuickForm($this);
95 public function postProcess() {
97 $params = $this->controller
->exportValues($this->_name
);
98 if ($this->_parentEventStartDate
&& $this->_parentEventEndDate
) {
99 $interval = CRM_Core_BAO_RecurringEntity
::getInterval($this->_parentEventStartDate
, $this->_parentEventEndDate
);
100 $params['intervalDateColumns'] = ['end_date' => $interval];
102 $params['dateColumns'] = ['start_date'];
103 $params['excludeDateRangeColumns'] = ['start_date', 'end_date'];
104 $params['entity_table'] = 'civicrm_event';
105 $params['entity_id'] = $this->_id
;
107 // CRM-16568 - check if parent exist for the event.
108 $parentId = CRM_Core_BAO_RecurringEntity
::getParentFor($this->_id
, 'civicrm_event');
109 $params['parent_entity_id'] = !empty($parentId) ?
$parentId : $params['entity_id'];
111 unset($params['id']);
113 $url = 'civicrm/event/manage/repeat';
114 $urlParams = "action=update&reset=1&id={$this->_id}&selectedChild=repeat";
118 'table' => 'civicrm_price_set_entity',
120 'entity_id' => $this->_id
,
121 'entity_table' => 'civicrm_event',
123 'linkedColumns' => ['entity_id'],
124 'isRecurringEntityRecord' => FALSE,
127 'table' => 'civicrm_uf_join',
129 'entity_id' => $this->_id
,
130 'entity_table' => 'civicrm_event',
132 'linkedColumns' => ['entity_id'],
133 'isRecurringEntityRecord' => FALSE,
136 'table' => 'civicrm_tell_friend',
138 'entity_id' => $this->_id
,
139 'entity_table' => 'civicrm_event',
141 'linkedColumns' => ['entity_id'],
142 'isRecurringEntityRecord' => TRUE,
145 'table' => 'civicrm_pcp_block',
147 'entity_id' => $this->_id
,
148 'entity_table' => 'civicrm_event',
150 'linkedColumns' => ['entity_id'],
151 'isRecurringEntityRecord' => TRUE,
154 CRM_Core_Form_RecurringEntity
::postProcess($params, 'civicrm_event', $linkedEntities);
155 CRM_Utils_System
::redirect(CRM_Utils_System
::url($url, $urlParams));
158 CRM_Core_Error
::fatal("Could not find Event ID");
160 parent
::endPostProcess();
164 * This function gets the number of participant count for the list of related event ids.
166 * @param array $listOfRelatedEntities
167 * List of related event ids .
172 public static function getParticipantCountforEvent($listOfRelatedEntities = []) {
173 $participantDetails = [];
174 if (!empty($listOfRelatedEntities)) {
175 $implodeRelatedEntities = implode(',', array_map(function ($entity) {
176 return $entity['id'];
177 }, $listOfRelatedEntities));
178 if ($implodeRelatedEntities) {
179 $query = "SELECT p.event_id as event_id,
180 concat_ws(' ', e.title, concat_ws(' - ', DATE_FORMAT(e.start_date, '%b %d %Y %h:%i %p'), DATE_FORMAT(e.end_date, '%b %d %Y %h:%i %p'))) as event_data,
181 count(p.id) as participant_count
182 FROM civicrm_participant p, civicrm_event e
183 WHERE p.event_id = e.id AND p.event_id IN ({$implodeRelatedEntities})
184 GROUP BY p.event_id";
185 $dao = CRM_Core_DAO
::executeQuery($query);
186 while ($dao->fetch()) {
187 $participantDetails['countByID'][$dao->event_id
] = $dao->participant_count
;
188 $participantDetails['countByName'][$dao->event_id
][$dao->event_data
] = $dao->participant_count
;
192 return $participantDetails;
196 * This function checks if there was any registration for related event ids,
197 * and returns array of ids with no registrations
199 * @param mixed $eventID string, int or object
203 public static function checkRegistrationForEvents($eventID) {
204 $eventIdsWithNoRegistration = [];
206 $getRelatedEntities = CRM_Core_BAO_RecurringEntity
::getEntitiesFor($eventID, 'civicrm_event', TRUE);
207 $participantDetails = CRM_Event_Form_ManageEvent_Repeat
::getParticipantCountforEvent($getRelatedEntities);
208 //Check if participants exists for events
209 foreach ($getRelatedEntities as $key => $value) {
210 if (empty($participantDetails['countByID'][$value['id']]) && $value['id'] != $eventID) {
211 //CRM_Event_BAO_Event::del($value['id']);
212 $eventIdsWithNoRegistration[] = $value['id'];
216 CRM_Core_BAO_RecurringEntity
::$_entitiesToBeDeleted = $eventIdsWithNoRegistration;
217 return CRM_Core_BAO_RecurringEntity
::$_entitiesToBeDeleted;