Beispiel #1
0
 /**
  * Build tag widget if correct parent is passed
  *
  * @param CRM_Core_Form $form
  *   Form object.
  * @param string $parentNames
  *   Parent name ( tag name).
  * @param string $entityTable
  *   Entitytable 'eg: civicrm_contact'.
  * @param int $entityId
  *   Entityid 'eg: contact id'.
  * @param bool $skipTagCreate
  *   True if tag need be created using ajax.
  * @param bool $skipEntityAction
  *   True if need to add entry in entry table via ajax.
  * @param string $tagsetElementName
  *   If you need to create tagsetlist with specific name.
  */
 public static function buildQuickForm(&$form, $parentNames, $entityTable, $entityId = NULL, $skipTagCreate = FALSE, $skipEntityAction = FALSE, $tagsetElementName = NULL)
 {
     $tagset = $form->_entityTagValues = array();
     $form->assign("isTagset", FALSE);
     $mode = NULL;
     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
         if ($parentId) {
             $tagsetItem = $tagsetElementName . 'parentId_' . $parentId;
             $tagset[$tagsetItem]['parentID'] = $parentId;
             list(, $mode) = explode('_', $entityTable);
             if (!$tagsetElementName) {
                 $tagsetElementName = $mode . "_taglist";
             }
             $tagset[$tagsetItem]['tagsetElementName'] = $tagsetElementName;
             $form->addEntityRef("{$tagsetElementName}[{$parentId}]", $parentNameItem, array('entity' => 'tag', 'multiple' => TRUE, 'create' => !$skipTagCreate, 'api' => array('params' => array('parent_id' => $parentId)), 'data-entity_table' => $entityTable, 'data-entity_id' => $entityId, 'class' => "crm-{$mode}-tagset"));
             if ($entityId) {
                 $tagset[$tagsetItem]['entityId'] = $entityId;
                 $entityTags = CRM_Core_BAO_EntityTag::getChildEntityTags($parentId, $entityId, $entityTable);
                 if ($entityTags) {
                     $form->setDefaults(array("{$tagsetElementName}[{$parentId}]" => implode(',', array_keys($entityTags))));
                 }
             } else {
                 $skipEntityAction = TRUE;
             }
             $tagset[$tagsetItem]['skipEntityAction'] = $skipEntityAction;
         }
     }
     if (!empty($tagset)) {
         // assign current tagsets which is used in postProcess
         $form->_tagsetInfo = $tagset;
         $form->assign("tagsetType", $mode);
         // Merge this tagset info with possibly existing info in the template
         $tagsetInfo = (array) $form->get_template_vars("tagsetInfo");
         if (empty($tagsetInfo[$mode])) {
             $tagsetInfo[$mode] = array();
         }
         $tagsetInfo[$mode] = array_merge($tagsetInfo[$mode], $tagset);
         $form->assign("tagsetInfo", $tagsetInfo);
         $form->assign("isTagset", TRUE);
     }
 }
 /**
  * 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, $searchMode = FALSE)
 {
     $tagset = $form->_entityTagValues = array();
     $mode = NULL;
     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
             $qparams = "parentId={$parentId}";
             if ($searchMode) {
                 $qparams .= '&search=1';
             }
             $tagUrl = CRM_Utils_System::url('civicrm/ajax/taglist', $qparams, FALSE, NULL, FALSE);
             $tagset[$tagsetItem]['tagUrl'] = $tagUrl;
             $tagset[$tagsetItem]['entityTable'] = $entityTable;
             $tagset[$tagsetItem]['skipTagCreate'] = $skipTagCreate;
             $tagset[$tagsetItem]['skipEntityAction'] = $skipEntityAction;
             switch ($entityTable) {
                 case 'civicrm_activity':
                     $tagsetElementName = "activity_taglist";
                     $mode = 'activity';
                     break;
                 case 'civicrm_case':
                     $tagsetElementName = "case_taglist";
                     $mode = 'case';
                     break;
                 default:
                     $tagsetElementName = "contact_taglist";
                     $mode = 'contact';
             }
             $tagset[$tagsetItem]['tagsetElementName'] = $tagsetElementName;
             $form->add('text', "{$tagsetElementName}[{$parentId}]", NULL);
             if ($entityId) {
                 $tagset[$tagsetItem]['entityId'] = $entityId;
                 $entityTags = CRM_Core_BAO_EntityTag::getChildEntityTags($parentId, $entityId, $entityTable);
             } else {
                 switch ($entityTable) {
                     case 'civicrm_activity':
                         if (!empty($form->_submitValues['activity_taglist']) && CRM_Utils_Array::value($parentId, $form->_submitValues['activity_taglist'])) {
                             $allTags = CRM_Core_PseudoConstant::tag();
                             $tagIds = explode(',', $form->_submitValues['activity_taglist'][$parentId]);
                             foreach ($tagIds as $tagId) {
                                 if (is_numeric($tagId)) {
                                     $tagName = $allTags[$tagId];
                                 } else {
                                     $tagName = $tagId;
                                 }
                                 $entityTags[$tagId] = array('id' => $tagId, 'name' => $tagName);
                             }
                         }
                         break;
                     case 'civicrm_case':
                         if (!empty($form->_submitValues['case_taglist']) && CRM_Utils_Array::value($parentId, $form->_submitValues['case_taglist'])) {
                             $allTags = CRM_Core_PseudoConstant::tag();
                             $tagIds = explode(',', $form->_submitValues['case_taglist'][$parentId]);
                             foreach ($tagIds as $tagId) {
                                 if (is_numeric($tagId)) {
                                     $tagName = $allTags[$tagId];
                                 } else {
                                     $tagName = $tagId;
                                 }
                                 $entityTags[$tagId] = array('id' => $tagId, 'name' => $tagName);
                             }
                         }
                         break;
                     default:
                         if (!empty($form->_formValues['contact_tags'])) {
                             $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;
                 }
             }
         }
     }
     if (!empty($tagset)) {
         $form->assign("tagsetInfo_{$mode}", $tagset);
     }
 }
Beispiel #3
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);
 }