Exemplo n.º 1
0
 /**
  * Function to build tag widget if correct parent is passed
  * 
  * @param object  $form form object
  * @param string  $parentName parent name ( tag name)
  * @param string  $entityTable entitytable 'eg: civicrm_contact'
  * @param int     $entityId    entityid  'eg: contact id'
  *
  * @return void
  * @access public
  * @static
  */
 static function buildQuickForm(&$form, $parentNames, $entityTable, $entityId = null, $skipTagCreate = false, $skipEntityAction = false)
 {
     $tagset = $form->_entityTagValues = array();
     foreach ($parentNames as &$parentNameItem) {
         // get the parent id for tag list input for keyword
         $parentId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Tag', $parentNameItem, 'id', 'name');
         // check if parent exists
         $entityTags = array();
         if ($parentId) {
             $tagsetItem = 'parentId_' . $parentId;
             $tagset[$tagsetItem]['parentName'] = $parentNameItem;
             $tagset[$tagsetItem]['parentID'] = $parentId;
             //tokeninput url
             $tagUrl = CRM_Utils_System::url('civicrm/ajax/taglist', "parentId={$parentId}", false, null, false);
             $tagset[$tagsetItem]['tagUrl'] = $tagUrl;
             $tagset[$tagsetItem]['entityTable'] = $entityTable;
             $tagset[$tagsetItem]['skipTagCreate'] = $skipTagCreate;
             $tagset[$tagsetItem]['skipEntityAction'] = $skipEntityAction;
             $tagset[$tagsetItem]['tagElementName'] = "taglist[{$parentId}]";
             $form->add('text', "taglist[{$parentId}]", null);
             if ($entityId) {
                 $tagset[$tagsetItem]['entityId'] = $entityId;
                 require_once 'CRM/Core/BAO/EntityTag.php';
                 $entityTags = CRM_Core_BAO_EntityTag::getChildEntityTags($parentId, $entityId, $entityTable);
             } elseif (!empty($form->_submitValues['taglist']) && CRM_Utils_Array::value($parentId, $form->_submitValues['taglist'])) {
                 $allTags = CRM_Core_Pseudoconstant::tag();
                 $tagIds = explode(',', $form->_submitValues['taglist'][$parentId]);
                 foreach ($tagIds as $tagId) {
                     if (is_numeric($tagId)) {
                         $tagName = $allTags[$tagId];
                     } else {
                         $tagName = $tagId;
                     }
                     $entityTags[$tagId] = array('id' => $tagId, 'name' => $tagName);
                 }
             } elseif (!empty($form->_formValues['contact_tags'])) {
                 require_once 'CRM/Core/BAO/Tag.php';
                 $contactTags = CRM_Core_BAO_Tag::getTagsUsedFor('civicrm_contact', true, false, $parentId);
                 foreach (array_keys($form->_formValues['contact_tags']) as $tagId) {
                     if (CRM_Utils_Array::value($tagId, $contactTags)) {
                         $tagName = $tagId;
                         if (is_numeric($tagId)) {
                             $tagName = $contactTags[$tagId];
                         }
                         $entityTags[$tagId] = array('id' => $tagId, 'name' => $tagName);
                     }
                 }
             }
             if (!empty($entityTags)) {
                 // assign as simple array for display in smarty
                 $tagset[$tagsetItem]['entityTagsArray'] = $entityTags;
                 // assign as json for js widget
                 $tagset[$tagsetItem]['entityTags'] = json_encode(array_values($entityTags));
                 if (!empty($form->_entityTagValues)) {
                     $form->_entityTagValues = CRM_Utils_Array::crmArrayMerge($entityTags, $form->_entityTagValues);
                 } else {
                     $form->_entityTagValues = $entityTags;
                 }
             }
         }
     }
     $form->assign('tagset', $tagset);
 }