3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.4 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2013 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
31 * @copyright CiviCRM LLC (c) 2004-2013
37 * This class generates form element for free tag widget
40 class CRM_Core_Form_Tag
{
41 public $_entityTagValues;
44 * Function to build tag widget if correct parent is passed
46 * @param object $form form object
47 * @param string $parentName parent name ( tag name)
48 * @param string $entityTable entitytable 'eg: civicrm_contact'
49 * @param int $entityId entityid 'eg: contact id'
50 * @param boolean $skipTagCreate true if tag need be created using ajax
51 * @param boolean $skipEntityAction true if need to add entry in entry table via ajax
52 * @param boolean $searchMode true if widget is used in search eg: advanced search
53 * @param string $tagsetElementName if you need to create tagsetlist with specific name
59 static function buildQuickForm(&$form, $parentNames, $entityTable, $entityId = NULL, $skipTagCreate = FALSE,
60 $skipEntityAction = FALSE, $searchMode = FALSE, $tagsetElementName = NULL ) {
61 $tagset = $form->_entityTagValues
= array();
62 $form->assign("isTagset", FALSE);
65 foreach ($parentNames as & $parentNameItem) {
66 // get the parent id for tag list input for keyword
67 $parentId = CRM_Core_DAO
::getFieldValue('CRM_Core_DAO_Tag', $parentNameItem, 'id', 'name');
69 // check if parent exists
70 $entityTags = array();
72 $tagsetItem = 'parentId_' . $parentId;
73 $tagset[$tagsetItem]['parentName'] = $parentNameItem;
74 $tagset[$tagsetItem]['parentID'] = $parentId;
77 $qparams = "parentId={$parentId}";
80 $qparams .= '&search=1';
83 $tagUrl = CRM_Utils_System
::url('civicrm/ajax/taglist', $qparams, FALSE, NULL, FALSE);
85 $tagset[$tagsetItem]['tagUrl'] = $tagUrl;
86 $tagset[$tagsetItem]['entityTable'] = $entityTable;
87 $tagset[$tagsetItem]['skipTagCreate'] = $skipTagCreate;
88 $tagset[$tagsetItem]['skipEntityAction'] = $skipEntityAction;
90 switch ($entityTable) {
91 case 'civicrm_activity':
92 $tagsetElementName = "activity_taglist";
97 $tagsetElementName = "case_taglist";
102 $mode = 'attachment';
106 $tagsetElementName = "contact_taglist";
110 $tagset[$tagsetItem]['tagsetElementName'] = $tagsetElementName;
111 if ($tagsetElementName) {
112 $form->add('text', "{$tagsetElementName}[{$parentId}]", NULL);
116 $tagset[$tagsetItem]['entityId'] = $entityId;
117 $entityTags = CRM_Core_BAO_EntityTag
::getChildEntityTags($parentId, $entityId, $entityTable);
121 switch ($entityTable) {
122 case 'civicrm_activity':
123 if (!empty($form->_submitValues
['activity_taglist']) &&
124 CRM_Utils_Array
::value($parentId, $form->_submitValues
['activity_taglist'])
126 $allTags = CRM_Core_PseudoConstant
::get('CRM_Core_DAO_EntityTag', 'tag_id', array('onlyActive' => FALSE));
127 $tagIds = explode(',', $form->_submitValues
['activity_taglist'][$parentId]);
128 foreach ($tagIds as $tagId) {
129 if (is_numeric($tagId)) {
130 $tagName = $allTags[$tagId];
135 $entityTags[$tagId] = array(
144 if (!empty($form->_submitValues
['case_taglist']) &&
145 CRM_Utils_Array
::value($parentId, $form->_submitValues
['case_taglist'])
147 $allTags = CRM_Core_PseudoConstant
::get('CRM_Core_DAO_EntityTag', 'tag_id', array('onlyActive' => FALSE));
148 $tagIds = explode(',', $form->_submitValues
['case_taglist'][$parentId]);
149 foreach ($tagIds as $tagId) {
150 if (is_numeric($tagId)) {
151 $tagName = $allTags[$tagId];
156 $entityTags[$tagId] = array(
164 $numAttachments = CRM_Core_BAO_Setting
::getItem(CRM_Core_BAO_Setting
::SYSTEM_PREFERENCES_NAME
, 'max_attachments');
165 for ($i = 1; $i <= $numAttachments; $i++
) {
166 $tagset[$i] = $tagset[$tagsetItem];
167 $tagset[$i]['tagsetElementName'] = "attachment_taglist_$i";
168 $form->add('text', "attachment_taglist_{$i}[{$parentId}]", NULL);
169 if (!empty($form->_submitValues
["attachment_taglist_$i"]) &&
170 CRM_Utils_Array
::value($parentId, $form->_submitValues
["attachment_taglist_$i"])
172 $allTags = CRM_Core_PseudoConstant
::get('CRM_Core_DAO_EntityTag', 'tag_id', array('onlyActive' => FALSE));
173 $tagIds = explode(',', $form->_submitValues
["attachment_taglist_$i"][$parentId]);
174 foreach ($tagIds as $tagId) {
175 if (is_numeric($tagId)) {
176 $tagName = $allTags[$tagId];
181 $entityTags[$tagId] = array(
188 unset($tagset[$tagsetItem]);
192 if (!empty($form->_formValues
['contact_tags'])) {
193 $contactTags = CRM_Core_BAO_Tag
::getTagsUsedFor('civicrm_contact', TRUE, FALSE, $parentId);
195 foreach (array_keys($form->_formValues
['contact_tags']) as $tagId) {
196 if (CRM_Utils_Array
::value($tagId, $contactTags)) {
198 if (is_numeric($tagId)) {
199 $tagName = $contactTags[$tagId];
202 $entityTags[$tagId] = array(
212 if (!empty($entityTags)) {
213 // assign as simple array for display in smarty
214 $tagset[$tagsetItem]['entityTagsArray'] = $entityTags;
215 // assign as json for js widget
216 $tagset[$tagsetItem]['entityTags'] = json_encode(array_values($entityTags));
218 if (!empty($form->_entityTagValues
)) {
219 $form->_entityTagValues
= CRM_Utils_Array
::crmArrayMerge($entityTags, $form->_entityTagValues
);
222 $form->_entityTagValues
= $entityTags;
228 if (!empty($tagset)) {
229 $form->assign("tagsetInfo_$mode", $tagset);
230 $form->assign("isTagset", TRUE);
235 * Function to save entity tags when it is not save used AJAX
238 static function postProcess(&$params, $entityId, $entityTable = 'civicrm_contact', &$form) {
239 foreach ($params as $value) {
243 $tagsIDs = explode(',', $value);
244 $insertValues = array();
246 if (!empty($tagsIDs)) {
247 foreach ($tagsIDs as $tagId) {
248 if (is_numeric($tagId)) {
249 if ($form && $form->_action
!= CRM_Core_Action
::UPDATE
) {
250 $insertValues[] = "( {$tagId}, {$entityId}, '{$entityTable}' ) ";
252 elseif (!$form ||
!array_key_exists($tagId, $form->_entityTagValues
)) {
253 $insertValues[] = "( {$tagId}, {$entityId}, '{$entityTable}' ) ";
258 if (!empty($insertValues)) {
259 $insertSQL = 'INSERT INTO civicrm_entity_tag ( tag_id, entity_id, entity_table ) VALUES ' . implode(', ', $insertValues) . ';';
260 CRM_Core_DAO
::executeQuery($insertSQL);