CRM-13966 HR-301 - Support contact create on clientside, toward refactoring out jquer...
authorColeman Watts <coleman@civicrm.org>
Thu, 6 Mar 2014 01:28:04 +0000 (20:28 -0500)
committerColeman Watts <coleman@civicrm.org>
Thu, 6 Mar 2014 02:28:46 +0000 (21:28 -0500)
CRM/Core/BAO/UFGroup.php
CRM/Core/Form.php
CRM/Core/Resources.php
css/civicrm.css
js/Common.js

index d389744fe2f28d10b0f0b1e90fe24eef29aa826c..0341d8d088158751ac1bbccd229bdd6ead413dc1 100644 (file)
@@ -3210,7 +3210,11 @@ AND    ( entity_id IS NULL OR entity_id <= 0 )
    * @param array|string $profiles - name of profile(s) to create links for
    * @param array $appendProfiles - name of profile(s) to append to each link
    */
-  static function getCreateLinks($profiles, $appendProfiles = array()) {
+  static function getCreateLinks($profiles = '', $appendProfiles = array()) {
+    // Default to contact profiles
+    if (!$profiles) {
+      $profiles = array('new_individual', 'new_organization', 'new_household');
+    }
     $profiles = (array) $profiles;
     $toGet = array_merge($profiles, (array) $appendProfiles);
     $retrieved = civicrm_api3('uf_group', 'get', array(
@@ -3223,8 +3227,9 @@ AND    ( entity_id IS NULL OR entity_id <= 0 )
         if (in_array($profile['name'], $profiles)) {
           $links[] = array(
             'label' => $profile['title'],
-            'url' => CRM_Utils_System::url('civicrm/profile/create', 'reset=1&context=dialog&&gid=' . $id),
-            'name' => $profile['name'],
+            'url' => CRM_Utils_System::url('civicrm/profile/create', "reset=1&context=dialog&gid=$id",
+              NULL, NULL, FALSE, NULL, FALSE) ,
+            'type' => ucfirst(str_replace('new_', '', $profile['name'])),
           );
         }
         else {
index fd47c2de40c0296d59af5c49f1e75d65be39c181..97e53f67c520e976f1bd15e5fa4e607979db803a 100644 (file)
@@ -1270,15 +1270,6 @@ class CRM_Core_Form extends HTML_QuickForm_Page {
     if ($props['entity'] == 'contact' && isset($props['create']) && !(CRM_Core_Permission::check('edit all contacts') || CRM_Core_Permission::check('add contacts'))) {
       unset($props['create']);
     }
-    // Convenient shortcut to passing in array create links
-    if ($props['entity'] == 'contact' && isset($props['create']) && $props['create'] === TRUE) {
-      if (empty($props['api']['params']['contact_type'])) {
-        $props['create'] = CRM_Core_BAO_UFGroup::getCreateLinks(array('new_individual', 'new_organization', 'new_household'));
-      }
-      else {
-        $props['create'] = CRM_Core_BAO_UFGroup::getCreateLinks('new_' . strtolower($props['api']['params']['contact_type']));
-      }
-    }
 
     $props['placeholder'] = CRM_Utils_Array::value('placeholder', $props, $required ? ts('- select %1 -', array(1 => ts(str_replace('_', ' ', $props['entity'])))) : ts('- none -'));
 
index edc0a95118f6fe21b69b81ece5d6e4298d8c3bae..d34d6f9aa9321082635eb6bb02238baf026b0fef 100644 (file)
@@ -540,6 +540,11 @@ class CRM_Core_Resources {
       $.fn.select2.defaults.formatSearching = " . json_encode(ts("Searching...")) . ";
       $.fn.select2.defaults.formatInputTooShort = function(){return cj(this).data('api-entity') == 'contact' ? $contactSearch : $otherSearch};
     ";
+
+    // Contact create profiles with localized names
+    if (CRM_Core_Permission::check('edit all contacts') || CRM_Core_Permission::check('add contacts')) {
+      $this->addSetting(array('profile' => array('contactCreate' => CRM_Core_BAO_UFGroup::getCreateLinks())));
+    }
   }
 
   /**
index 9b0be57d6e5b7001abd013ba215ba7ec6dbdb228..220f0d43644cf05432dc9282f105c92a13b1b41e 100644 (file)
@@ -2518,14 +2518,14 @@ div.grippie {
   background-position: -192px -128px;
 }
 
-.crm-container .new_individual-icon,
+.crm-container .Individual-profile-icon,
 .crm-container .user-record-icon {
   background-position: -144px -96px;
 }
-.crm-container .new_household-icon {
+.crm-container .Household-profile-icon {
   background-position: 0 -112px;
 }
-.crm-container .new_organization-icon {
+.crm-container .Organization-profile-icon {
   background-position: -112px -112px;
 }
 .crm-container .inform-icon {
index b34348d89fa6780051bf3c087e0579dc7f901914..93448f3eff48da1a0a913be804b5a67d5165229b 100644 (file)
@@ -315,6 +315,7 @@ CRM.validate = CRM.validate || {
       $el.data('api-entity', entity);
       $el.data('select-params', $.extend({}, $el.data('select-params') || {}, options.select));
       $el.data('api-params', $.extend({}, $el.data('api-params') || {}, options.api));
+      $el.data('create-links', options.create || $el.data('create-links'));
       $el.addClass('crm-ajax-select crm-' + entity + '-ref');
       var settings = {
         // Use select2 ajax helper instead of CRM.api because it provides more value
@@ -335,7 +336,7 @@ CRM.validate = CRM.validate || {
           }
         },
         minimumInputLength: 1,
-        formatResult: CRM.utils.formatSelect2Result,
+        formatResult: formatSelect2Result,
         formatSelection: function(row) {
           return row.label;
         },
@@ -363,14 +364,14 @@ CRM.validate = CRM.validate || {
       if ($el.data('create-links')) {
         selectParams.formatInputTooShort = function() {
           var txt = $el.data('select-params').formatInputTooShort || $.fn.select2.defaults.formatInputTooShort.call(this);
-          if ($el.data('create-links').length) {
-            txt += ' ' + ts('or') + '<br />' + CRM.utils.formatSelect2CreateLinks($el);
+          if ($el.data('create-links')) {
+            txt += ' ' + ts('or') + '<br />' + formatSelect2CreateLinks($el);
           }
           return txt;
         };
         selectParams.formatNoMatches = function() {
           var txt = $el.data('select-params').formatNoMatches || $.fn.select2.defaults.formatNoMatches;
-          return txt + '<br />' + CRM.utils.formatSelect2CreateLinks($el);
+          return txt + '<br />' + formatSelect2CreateLinks($el);
         };
         $el.off('.createLinks').on('select2-open.createLinks', function() {
           var $el = $(this);
@@ -397,7 +398,7 @@ CRM.validate = CRM.validate || {
     });
   };
 
-  CRM.utils.formatSelect2Result = function(row) {
+  function formatSelect2Result(row) {
     var markup = '<div class="crm-select2-row">';
     if (row.image !== undefined) {
       markup += '<div class="crm-select2-image"><img src="' + row.image + '"/></div>';
@@ -412,19 +413,26 @@ CRM.validate = CRM.validate || {
     });
     markup += '</div></div></div>';
     return markup;
-  };
-  
-  CRM.utils.formatSelect2CreateLinks = function($el) {
+  }
+
+  function formatSelect2CreateLinks($el) {
+    var
+      createLinks = $el.data('create-links'),
+      api = $el.data('api-params') || {},
+      type = api.params ? api.params.contact_type : null;
+    if (createLinks === true) {
+      createLinks = type ? _.where(CRM.profile.contactCreate, {type: type}) : CRM.profile.contactCreate;
+    }
     var markup = '';
-    $.each($el.data('create-links'), function(k, link) {
+    _.each(createLinks, function(link) {
       markup += ' <a class="crm-add-entity crm-hover-button" href="' + link.url + '">';
-      if (link.name) {
-        markup += '<span class="icon ' + link.name + '-icon"></span> ';
+      if (link.type) {
+        markup += '<span class="icon ' + link.type + '-profile-icon"></span> ';
       }
       markup += link.label + '</a>';
     });
     return markup;
-  };
+  }
 
   // Initialize widgets
   $(document).on('crmLoad', function(e) {