Merge pull request #15410 from herbdool/cloud-21
[civicrm-core.git] / CRM / Contact / Form / Location.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
5 | |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
10 */
11
12 /**
13 *
14 * @package CRM
15 * @copyright CiviCRM LLC https://civicrm.org/licensing
16 */
17 class CRM_Contact_Form_Location {
18
19 /**
20 * Set variables up before form is built.
21 *
22 * @param CRM_Core_Form $form
23 */
24 public static function preProcess(&$form) {
25 $form->_addBlockName = CRM_Utils_Request::retrieve('block', 'String');
26 $additionalblockCount = CRM_Utils_Request::retrieve('count', 'Positive');
27
28 $form->assign('addBlock', FALSE);
29 if ($form->_addBlockName && $additionalblockCount) {
30 $form->assign('addBlock', TRUE);
31 $form->assign('blockName', $form->_addBlockName);
32 $form->assign('blockId', $additionalblockCount);
33 $form->set($form->_addBlockName . '_Block_Count', $additionalblockCount);
34 }
35
36 if (is_a($form, 'CRM_Event_Form_ManageEvent_Location')
37 || is_a($form, 'CRM_Contact_Form_Domain')) {
38 $form->_blocks = [
39 'Address' => ts('Address'),
40 'Email' => ts('Email'),
41 'Phone' => ts('Phone'),
42 ];
43 }
44
45 $form->assign('blocks', $form->_blocks);
46 $form->assign('className', CRM_Utils_System::getClassName($form));
47
48 // get address sequence.
49 if (!$addressSequence = $form->get('addressSequence')) {
50 $addressSequence = CRM_Core_BAO_Address::addressSequence();
51 $form->set('addressSequence', $addressSequence);
52 }
53 $form->assign('addressSequence', $addressSequence);
54 }
55
56 /**
57 * Build the form object.
58 *
59 * @param CRM_Core_Form $form
60 */
61 public static function buildQuickForm(&$form) {
62 // required for subsequent AJAX requests.
63 $ajaxRequestBlocks = [];
64 $generateAjaxRequest = 0;
65
66 //build 1 instance of all blocks, without using ajax ...
67 foreach ($form->_blocks as $blockName => $label) {
68 $name = strtolower($blockName);
69
70 $instances = [1];
71 if (!empty($_POST[$name]) && is_array($_POST[$name])) {
72 $instances = array_keys($_POST[$name]);
73 }
74 elseif (property_exists($form, '_values') && !empty($form->_values[$name]) && is_array($form->_values[$name])) {
75 $instances = array_keys($form->_values[$name]);
76 }
77
78 foreach ($instances as $instance) {
79 if ($instance == 1) {
80 $form->assign('addBlock', FALSE);
81 $form->assign('blockId', $instance);
82 }
83 else {
84 //we are going to build other block instances w/ AJAX
85 $generateAjaxRequest++;
86 $ajaxRequestBlocks[$blockName][$instance] = TRUE;
87 }
88
89 $form->set($blockName . '_Block_Count', $instance);
90 $formName = 'CRM_Contact_Form_Edit_' . $blockName;
91 $formName::buildQuickForm($form);
92 }
93 }
94
95 //assign to generate AJAX request for building extra blocks.
96 $form->assign('generateAjaxRequest', $generateAjaxRequest);
97 $form->assign('ajaxRequestBlocks', $ajaxRequestBlocks);
98 }
99
100 }