X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCore%2FForm%2FTask.php;h=879bfc6a471bbd1e5dc26dbb80193981b3b3dd49;hb=cc58f6c5756ba74b4a914e21bb011332d5d79c80;hp=7ca43d4a2f94289eaec262a8e9399f0e5a274783;hpb=6a1ebc3a89760e41adc7d414494f588ab7bd31f3;p=civicrm-core.git diff --git a/CRM/Core/Form/Task.php b/CRM/Core/Form/Task.php index 7ca43d4a2f..879bfc6a47 100644 --- a/CRM/Core/Form/Task.php +++ b/CRM/Core/Form/Task.php @@ -1,33 +1,17 @@ _entityIds = array(); + $form->_entityIds = []; $searchFormValues = $form->controller->exportValues($form->get('searchFormName')); @@ -115,7 +99,7 @@ abstract class CRM_Core_Form_Task extends CRM_Core_Form { $entityTasks = $className::tasks(); $form->assign('taskName', $entityTasks[$form->_task]); - $entityIds = array(); + $entityIds = []; if ($searchFormValues['radio_ts'] == 'ts_sel') { foreach ($searchFormValues as $name => $value) { if (substr($name, 0, CRM_Core_Form::CB_PREFIX_LEN) == CRM_Core_Form::CB_PREFIX) { @@ -194,18 +178,17 @@ abstract class CRM_Core_Form_Task extends CRM_Core_Form { * @param bool $submitOnce */ public function addDefaultButtons($title, $nextType = 'next', $backType = 'back', $submitOnce = FALSE) { - $this->addButtons(array( - array( - 'type' => $nextType, - 'name' => $title, - 'isDefault' => TRUE, - ), - array( - 'type' => $backType, - 'name' => ts('Cancel'), - ), - ) - ); + $this->addButtons([ + [ + 'type' => $nextType, + 'name' => $title, + 'isDefault' => TRUE, + ], + [ + 'type' => $backType, + 'name' => ts('Cancel'), + ], + ]); } /** @@ -218,4 +201,55 @@ abstract class CRM_Core_Form_Task extends CRM_Core_Form { return $this->queryMode ?: CRM_Contact_BAO_Query::MODE_CONTACTS; } + /** + * Given the component id, compute the contact id + * since it's used for things like send email. + * + * @todo At the moment this duplicates a similar function in CRM_Core_DAO + * because right now only the case component is using this. Since the + * default $orderBy is '' which is what the original does, others should be + * easily convertable as NFC. + * @todo The passed in variables should be class member variables. Shouldn't + * need to have passed in vars. + * + * @param $componentIDs + * @param string $tableName + * @param string $idField + * + * @return array + */ + public function getContactIDsFromComponent($componentIDs, $tableName, $idField = 'id') { + $contactIDs = []; + + if (empty($componentIDs)) { + return $contactIDs; + } + + $orderBy = $this->orderBy(); + + $IDs = implode(',', $componentIDs); + $query = " +SELECT contact_id + FROM $tableName + WHERE $idField IN ( $IDs ) $orderBy +"; + + $dao = CRM_Core_DAO::executeQuery($query); + while ($dao->fetch()) { + $contactIDs[] = $dao->contact_id; + } + return $contactIDs; + } + + /** + * Default ordering for getContactIDsFromComponent. Subclasses can override. + * + * @return string + * SQL fragment. Either return '' or a valid order clause including the + * words "ORDER BY", e.g. "ORDER BY `{$this->idField}`" + */ + public function orderBy() { + return ''; + } + }