From c975485da5e394e19fbe4b2e85a03add73903d60 Mon Sep 17 00:00:00 2001 From: Eileen McNaughton Date: Tue, 23 Aug 2022 08:52:59 +1200 Subject: [PATCH] Import - remove import button if it will not work --- CRM/Import/Form/Preview.php | 76 +++++++++++++++++++++---------------- CRM/Import/Forms.php | 11 ++++++ 2 files changed, 55 insertions(+), 32 deletions(-) diff --git a/CRM/Import/Form/Preview.php b/CRM/Import/Form/Preview.php index 5fff559d0a..693a612f46 100644 --- a/CRM/Import/Form/Preview.php +++ b/CRM/Import/Form/Preview.php @@ -43,38 +43,7 @@ abstract class CRM_Import_Form_Preview extends CRM_Import_Forms { * Build the form object. */ public function buildQuickForm() { - - // FIXME: This is a hack... - // The tpl contains javascript that starts the import on form submit - // Since our back/cancel buttons are of html type "submit" we have to prevent a form submit event when they are clicked - // Hacking in some onclick js to make them act more like links instead of buttons - $path = CRM_Utils_System::currentPath(); - $query = ['_qf_MapField_display' => 'true']; - $qfKey = CRM_Utils_Request::retrieve('qfKey', 'String'); - if (CRM_Utils_Rule::qfKey($qfKey)) { - $query['qfKey'] = $qfKey; - } - $previousURL = CRM_Utils_System::url($path, $query, FALSE, NULL, FALSE); - $cancelURL = CRM_Utils_System::url($path, 'reset=1', FALSE, NULL, FALSE); - - $this->addButtons([ - [ - 'type' => 'back', - 'name' => ts('Previous'), - 'js' => ['onclick' => "location.href='{$previousURL}'; return false;"], - ], - [ - 'type' => 'next', - 'name' => ts('Import Now'), - 'spacing' => '          ', - 'isDefault' => TRUE, - ], - [ - 'type' => 'cancel', - 'name' => ts('Cancel'), - 'js' => ['onclick' => "location.href='{$cancelURL}'; return false;"], - ], - ]); + $this->addButtons($this->getButtons()); } /** @@ -146,4 +115,47 @@ abstract class CRM_Import_Form_Preview extends CRM_Import_Forms { $runner->runAllViaWeb(); } + /** + * Get the buttons for the form. + * + * @return array|array[] + * @throws \CRM_Core_Exception + */ + private function getButtons(): array { + // FIXME: This is a hack... + // The tpl contains javascript that starts the import on form submit + // Since our back/cancel buttons are of html type "submit" we have to prevent a form submit event when they are clicked + // Hacking in some onclick js to make them act more like links instead of buttons + $path = CRM_Utils_System::currentPath(); + $query = ['_qf_MapField_display' => 'true']; + $qfKey = CRM_Utils_Request::retrieve('qfKey', 'String'); + if (CRM_Utils_Rule::qfKey($qfKey)) { + $query['qfKey'] = $qfKey; + } + $previousURL = CRM_Utils_System::url($path, $query, FALSE, NULL, FALSE); + $cancelURL = CRM_Utils_System::url($path, 'reset=1', FALSE, NULL, FALSE); + $buttons = [ + [ + 'type' => 'back', + 'name' => ts('Previous'), + 'js' => ['onclick' => "location.href='{$previousURL}'; return false;"], + ], + ]; + if ($this->hasImportableRows()) { + $buttons[] = [ + 'type' => 'next', + 'name' => ts('Import Now'), + 'spacing' => '          ', + 'isDefault' => TRUE, + ]; + } + $buttons[] = [ + 'type' => 'cancel', + 'name' => ts('Cancel'), + 'js' => ['onclick' => "location.href='{$cancelURL}'; return false;"], + ]; + + return $buttons; + } + } diff --git a/CRM/Import/Forms.php b/CRM/Import/Forms.php index c9636b25bc..a274f8ceb2 100644 --- a/CRM/Import/Forms.php +++ b/CRM/Import/Forms.php @@ -683,4 +683,15 @@ class CRM_Import_Forms extends CRM_Core_Form { return ((int) $this->getSubmittedValue('onDuplicate')) === CRM_Import_Parser::DUPLICATE_SKIP; } + /** + * Are there valid rows to import. + * + * @return bool + * + * @throws \CRM_Core_Exception + */ + protected function hasImportableRows(): bool { + return (bool) $this->getRowCount(['new']); + } + } -- 2.25.1