Merge pull request #18544 from magnolia61/participant_status_notification_default
[civicrm-core.git] / templates / CRM / Contact / Form / Search / Builder.js
index 4eb35d765c86654f66b25f3d1dfa2dcbd7b3b070..4dc3523571e949d94e59e099d407dcf72bb3e06f 100644 (file)
       buildSelect(row, field, op, false);
     }
 
-    if ((field in CRM.searchBuilder.fieldTypes) === true &&
-      CRM.searchBuilder.fieldTypes[field] == 'Date'
-    ) {
-      buildDate(row, op);
+    if (CRM.searchBuilder.fieldTypes[field] === 'Date' || CRM.searchBuilder.fieldTypes[field] === 'Timestamp') {
+      buildDate(row, op, CRM.searchBuilder.fieldTypes[field] === 'Timestamp');
     }
     else {
       removeDate(row);
    * @param row: jQuery object
    */
   function removeSelect(row) {
-    $('.crm-search-value input', row).show();
+    $('.crm-search-value input', row).not('.crm-hidden-date').show();
     $('.crm-search-value select', row).remove();
   }
 
    * Add a datepicker if appropriate for this operation
    * @param row: jQuery object
    */
-  function buildDate(row, op) {
+  function buildDate(row, op, time) {
     var input = $('.crm-search-value input', row);
     // These are operations that should not get a datepicker
     var datePickerOp = ($.inArray(op, ['IN', 'NOT IN', 'LIKE', 'RLIKE']) < 0);
     if (!datePickerOp) {
       removeDate(row);
     }
-    else if (!input.hasClass('hasDatepicker')) {
-      input.addClass('dateplugin').datepicker({
-        dateFormat: 'yymmdd',
-        changeMonth: true,
-        changeYear: true,
-        yearRange: '-100:+20'
-      });
+    else if (!$('input.crm-hidden-date', row).length) {
+      // Unfortunately the search builder form expects yyyymmdd and crmDatepicker gives yyyy-mm-dd so we have to fudge it
+      var val = input.val();
+      if (val && val.length === 8) {
+        input.val(val.substr(0, 4) + '-' + val.substr(4, 2) + '-' + val.substr(6, 2));
+      } else if (val && val.length === 14) {
+        input.val(val.substr(0, 4) + '-' + val.substr(4, 2) + '-' + val.substr(6, 2) + ' ' + val.substr(8, 2) + ':' + val.substr(10, 2) + ':' + val.substr(12, 2));
+      }
+      input
+        .on('change.searchBuilder', function() {
+          if ($(this).val()) {
+            $(this).val($(this).val().replace(/[: -]/g, ''));
+          }
+        })
+        .crmDatepicker({
+          time: time,
+          yearRange: '-100:+20'
+        })
+        .triggerHandler('change', ['userInput']);
     }
   }
 
    * @param row: jQuery object
    */
   function removeDate(row) {
-    var input = $('.crm-search-value input', row);
-    if (input.hasClass('hasDatepicker')) {
-      input.removeClass('dateplugin').val('').datepicker('destroy');
-    }
+    $('.crm-search-value input.crm-hidden-date', row).off('.searchBuilder').crmDatepicker('destroy');
   }
 
   /**
       })
       // Add new field - if there's a hidden one, show it
       // Otherwise allow form to submit and fetch more from the server
-      .on('click', 'input[name^=addMore]', function() {
+      .on('click', 'button[name^=addMore]', function() {
         var table = $(this).closest('table');
         if ($('tr:hidden', table).length) {
           $('tr:hidden', table).first().show();