Ensure formal_title is assigned to the template.
authorEileen McNaughton <emcnaughton@wikimedia.org>
Thu, 25 Nov 2021 06:59:23 +0000 (19:59 +1300)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Sat, 27 Nov 2021 20:34:17 +0000 (09:34 +1300)
This just gets past one enotice in the great juggle

CRM/Contact/Form/Edit/Individual.php
CRM/Core/Form.php
templates/CRM/Contact/Form/Edit/Individual.tpl

index 4547b56e33de0aa27993ff65f871ed2b6e47f561..af646a350c47b415f66a14c0c86e84fe9f2b09be 100644 (file)
@@ -31,7 +31,8 @@ class CRM_Contact_Form_Edit_Individual {
    *   ( 1 for contact summary.
    * top bar form and 2 for display name edit )
    */
-  public static function buildQuickForm(&$form, $inlineEditMode = NULL) {
+  public static function buildQuickForm($form, $inlineEditMode = NULL): void {
+    $form->addOptionalQuickFormElement('formal_title');
     $form->applyFilter('__ALL__', 'trim');
 
     if (!$inlineEditMode || $inlineEditMode == 1) {
@@ -46,7 +47,7 @@ class CRM_Contact_Form_Edit_Individual {
       // Fixme: dear god why? these come out in a format that is NOT the name of the fields.
       foreach ($nameFields as &$fix) {
         $fix = str_replace(' ', '_', strtolower($fix));
-        if ($fix == 'prefix' || $fix == 'suffix') {
+        if ($fix === 'prefix' || $fix === 'suffix') {
           // God, why god?
           $fix .= '_id';
         }
index 9fdf2e86683d522bf8147618b959888e40997978..dd5c84882ee4943e84a1ddbc48433dce8db7df19 100644 (file)
@@ -1057,7 +1057,27 @@ class CRM_Core_Form extends HTML_QuickForm_Page {
   }
 
   /**
-   * Get any smarty elements that may not be present in the form.
+   * Quick form elements which are conditionally added to the form.
+   *
+   * Elements in this array will be added to the form at the end if not present
+   * so that smarty does not e-notice on things like '{if $form.group}' when
+   * 'group' is not added to the form (e.g when no groups exist).
+   *
+   * @var array
+   */
+  protected $optionalQuickFormElements = [];
+
+  /**
+   * Add an optional element to the optional elements array.
+   *
+   * @param string $elementName
+   */
+  public function addOptionalQuickFormElement(string $elementName): void {
+    $this->optionalQuickFormElements[] = $elementName;
+  }
+
+  /**
+   * Get any quick-form elements that may not be present in the form.
    *
    * To make life simpler for smarty we ensure they are set to null
    * rather than unset. This is done at the last minute when $this
@@ -1066,7 +1086,7 @@ class CRM_Core_Form extends HTML_QuickForm_Page {
    * @return array
    */
   public function getOptionalQuickFormElements(): array {
-    return [];
+    return $this->optionalQuickFormElements;
   }
 
   /**
index ed18ebcd9e628cf0c8203258f2e4ae0cb2714dea..24f529edb39bc07cf6ba83b8a213f327e5138399 100644 (file)
@@ -16,7 +16,7 @@
       {$form.prefix_id.html}
     </td>
     {/if}
-    {if !empty($form.formal_title)}
+    {if $form.formal_title}
     <td>
       {$form.formal_title.label}<br/>
       {$form.formal_title.html}