Complete implementation, including database upgrade.
authorNicolas Ganivet <nicolas@cividesk.com>
Wed, 29 May 2013 08:00:04 +0000 (02:00 -0600)
committerNicolas Ganivet <nicolas@cividesk.com>
Wed, 29 May 2013 08:07:08 +0000 (02:07 -0600)
CRM/Core/BAO/CustomField.php
CRM/Custom/Form/Field.php
CRM/Upgrade/Incremental/sql/4.4.alpha1.mysql.tpl
templates/CRM/Custom/Form/Field.tpl

index 0827142dd80910803566e98f1abce9a27a3dc99d..eae36c04d0a8d66150792f0ea208caefb7e136fb 100644 (file)
@@ -762,13 +762,15 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField {
         else {
           $attributes .= 'rows=4';
         }
-
         if ($field->note_columns) {
           $attributes .= ' cols=' . $field->note_columns;
         }
         else {
           $attributes .= ' cols=60';
         }
+        if ($field->text_length) {
+          $attributes .= ' maxlength=' . $field->text_length;
+        }
         $element = &$qf->add(strtolower($field->html_type),
           $elementName,
           $label,
@@ -958,7 +960,11 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField {
         break;
 
       case 'RichTextEditor':
-        $qf->addWysiwyg($elementName, $label, array('rows' => $field->note_rows, 'cols' => $field->note_columns), $search);
+        $attributes = array('rows' => $field->note_rows, 'cols' => $field->note_columns);
+        if ($field->text_length) {
+          $attributes['maxlength'] = $field->text_length; 
+        }
+        $qf->addWysiwyg($elementName, $label, $attributes, $search);
         break;
 
       case 'Autocomplete-Select':
index 567eafc4f77f89cdc7d325a14382d2b548907e7e..b61baf4e05a27054cf014c079bea22b832dff34d 100644 (file)
@@ -123,6 +123,8 @@ class CRM_Custom_Form_Field extends CRM_Core_Form {
     if ($this->_id) {
       $params = array('id' => $this->_id);
       CRM_Core_BAO_CustomField::retrieve($params, $this->_values);
+      // note_length is an alias for the text_length field
+      $this->_values['note_length'] = CRM_Utils_Array::value('text_length', $this->_values);
     }
 
     if (self::$_dataToLabels == NULL) {
@@ -445,9 +447,16 @@ class CRM_Custom_Form_Field extends CRM_Core_Form {
       $attributes['note_rows'],
       FALSE
     );
+    $this->add('text',
+      'note_length',
+      ts('Maximum length') . ' ',
+      $attributes['text_length'], // note_length is an alias for the text-length field
+      FALSE
+    );
 
     $this->addRule('note_columns', ts('Value should be a positive number'), 'positiveInteger');
     $this->addRule('note_rows', ts('Value should be a positive number'), 'positiveInteger');
+    $this->addRule('note_length', ts('Value should be a positive number'), 'positiveInteger');
 
     // weight
     $this->add('text', 'weight', ts('Order'),
@@ -956,6 +965,12 @@ SELECT id
       }
     }
 
+    // The text_length attribute for Memo fields is in a different input as there
+    // are different label, help text and default value than for other type fields
+    if ($params['data_type'] == "Memo") {
+      $params['text_length'] = $params['note_length'];
+    }
+
     // need the FKEY - custom group id
     $params['custom_group_id'] = $this->_gid;
 
index d7d091f7110789f4f1cfbfdce5be5939d4376002..5f7ad377cc5ee483253b825940d39ed2d2621b6d 100644 (file)
@@ -29,4 +29,6 @@ SELECT @bounceTypeID := max(id) FROM civicrm_mailing_bounce_type WHERE name = 'S
 INSERT INTO civicrm_mailing_bounce_pattern (bounce_type_id, pattern)
 VALUES (@bounceTypeID, 'X-HmXmrOriginalRecipient');
 
+-- CRM-12716
+UPDATE civicrm_custom_field SET text_length = NULL WHERE html_type = 'TextArea' AND text_length = 255;
 
index c9f0e4e1ceb91b0d0d0ced06ec7a7f07c84f4b13..61c196cfeb0fe3ccc8b492e49cd0cc5fd54b4e77 100644 (file)
@@ -115,9 +115,11 @@ function custom_option_html_type( ) {
     if ( data_type_id == 4 ) {
         cj("#noteColumns").show();
         cj("#noteRows").show();
+        cj("#noteLength").show();
     } else {
         cj("#noteColumns").hide();
         cj("#noteRows").hide();
+        cj("#noteLength").hide();
     }
 
     if ( data_type_id > 3) {
@@ -209,6 +211,10 @@ function custom_option_html_type( ) {
             <td class="label">{$form.note_columns.label}</td>
             <td class="html-adjust">{$form.note_columns.html}</td>
         </tr>
+        <tr class="crm-custom-field-form-block-note_length" id="noteLength" {if $action neq 2 && ($form.data_type.value.0.0 != 4)}class="hide-block"{/if}>
+            <td class="label">{$form.note_length.label}</td>
+            <td class="html-adjust">{$form.note_length.html} <span class="description">{ts}Leave blank for unlimited. This limit is not implemented by all browsers and rich text editors.{/ts}</span></td>
+        </tr>
         <tr class="crm-custom-field-form-block-weight" >
             <td class="label">{$form.weight.label}</td>
             <td>{$form.weight.html|crmAddClass:two}