_id = CRM_Utils_Request::retrieve('id', 'String', $this, FALSE); $this->_id = explode(',', $this->_id); $url = CRM_Utils_System::url('civicrm/tag'); if (count($this->_id) < 2) { CRM_Core_Error::statusBounce(ts("You must select at least 2 tags for merging."), $url); } $tags = civicrm_api3('Tag', 'get', ['id' => ['IN' => $this->_id], 'options' => ['limit' => 0]]); $this->_tags = $tags['values']; if (count($this->_id) != count($this->_tags)) { CRM_Core_Error::statusBounce(ts("Unknown tag."), $url); } if (!CRM_Core_Permission::check('administer reserved tags')) { foreach ($tags['values'] as $tag) { if (!empty($tag['is_reserved'])) { CRM_Core_Error::statusBounce(ts("You do not have permission to administer reserved tags."), $url); } } } } /** * Build the form object. */ public function buildQuickForm() { $this->add('text', 'name', ts('Name of combined tag'), TRUE); $this->assign('tags', CRM_Utils_Array::collect('name', $this->_tags)); $this->addButtons([ [ 'type' => 'next', 'name' => ts('Merge'), 'spacing' => '         ', 'isDefault' => TRUE, ], [ 'type' => 'cancel', 'name' => ts('Cancel'), ], ] ); } /** * Set default values for the form. * * @return array */ public function setDefaultValues() { $primary = CRM_Utils_Array::first($this->_tags); return [ 'name' => $primary['name'], ]; } /** * Process the form submission. */ public function postProcess() { $params = $this->exportValues(); $deleted = CRM_Utils_Array::collect('name', $this->_tags); $primary = array_shift($this->_tags); foreach ($this->_tags as $tag) { CRM_Core_BAO_EntityTag::mergeTags($primary['id'], $tag['id']); } if ($params['name'] != $primary['name']) { civicrm_api3('Tag', 'create', ['id' => $primary['id'], 'name' => $params['name']]); } $key = array_search($params['name'], $deleted); if ($key !== FALSE) { unset($deleted[$key]); } CRM_Core_Session::setStatus( ts('All records previously tagged %1 are now tagged %2.', [1 => implode(' ' . ts('or') . ' ', $deleted), 2 => $params['name']]), ts('%1 Tags Merged', [1 => count($this->_id)]), 'success' ); CRM_Core_Session::singleton()->pushUserContext(CRM_Utils_System::url('civicrm/tag')); } }