_tags = CRM_Core_BAO_Tag::getTags(); foreach ($this->_tags as $tagID => $tagName) { $this->_tagElement = &$this->addElement('checkbox', "tag[$tagID]", NULL, $tagName); } $parentNames = CRM_Core_BAO_Tag::getTagSet('civicrm_contact'); CRM_Core_Form_Tag::buildQuickForm($this, $parentNames, 'civicrm_contact'); $this->addDefaultButtons(ts('Tag Contacts')); } function addRules() { $this->addFormRule(array('CRM_Contact_Form_Task_AddToTag', 'formRule')); } /** * @param CRM_Core_Form $form * @param $rule * * @return array */ static function formRule($form, $rule) { $errors = array(); if (empty($form['tag']) && empty($form['contact_taglist'])) { $errors['_qf_default'] = ts("Please select at least one tag."); } return $errors; } /** * Process the form after the input has been submitted and validated * * @access public * * @return void */ public function postProcess() { //get the submitted values in an array $params = $this->controller->exportValues($this->_name); $contactTags = $tagList = array(); // check if contact tags exists if (!empty($params['tag'])) { $contactTags = $params['tag']; } // check if tags are selected from taglists if (!empty($params['contact_taglist'])) { foreach ($params['contact_taglist'] as $val) { if ($val) { if (is_numeric($val)) { $tagList[$val] = 1; } else { $tagIDs = explode(',', $val); if (!empty($tagIDs)) { foreach ($tagIDs as $tagID) { if (is_numeric($tagID)) { $tagList[$tagID] = 1; } } } } } } } $tagSets = CRM_Core_BAO_Tag::getTagsUsedFor('civicrm_contact', FALSE, TRUE); foreach ($tagSets as $key => $value) { $this->_tags[$key] = $value['name']; } // merge contact and taglist tags $allTags = CRM_Utils_Array::crmArrayMerge($contactTags, $tagList); $this->_name = array(); foreach ($allTags as $key => $dnc) { $this->_name[] = $this->_tags[$key]; list($total, $added, $notAdded) = CRM_Core_BAO_EntityTag::addEntitiesToTag($this->_contactIds, $key); $status = array(ts('%count contact tagged', array('count' => $added, 'plural' => '%count contacts tagged'))); if ($notAdded) { $status[] = ts('%count contact already had this tag', array('count' => $notAdded, 'plural' => '%count contacts already had this tag')); } $status = ''; CRM_Core_Session::setStatus($status, ts("Added Tag %1", array(1 => $this->_tags[$key])), 'success', array('expires' => 0)); } } }