From aecebdedd1b7ac360a060693878f7107e4fa2f76 Mon Sep 17 00:00:00 2001 From: Bohdan Dmytryshyn Date: Mon, 7 Dec 2020 12:12:39 +0200 Subject: [PATCH] Release 5.4.0 --- .../Api/CiviMobileCmsRegistration/Create.php | 14 +++++++--- .../CiviMobileParticipantPaymentLink/Get.php | 7 ++++- CRM/CiviMobileAPI/Page/Auth.php | 3 +++ CRM/CiviMobileAPI/Utils/Cms.php | 5 +++- CRM/CiviMobileAPI/Utils/Cms/Registration.php | 8 ++++++ CRM/CiviMobileAPI/Utils/CmsUser.php | 16 ++++++++++++ CRM/CiviMobileAPI/Utils/File.php | 26 ++++--------------- README.md | 2 +- css/civimobileapiSettings.css | 4 +++ info.xml | 4 +-- 10 files changed, 59 insertions(+), 30 deletions(-) diff --git a/CRM/CiviMobileAPI/Api/CiviMobileCmsRegistration/Create.php b/CRM/CiviMobileAPI/Api/CiviMobileCmsRegistration/Create.php index 126bb89..df49150 100644 --- a/CRM/CiviMobileAPI/Api/CiviMobileCmsRegistration/Create.php +++ b/CRM/CiviMobileAPI/Api/CiviMobileCmsRegistration/Create.php @@ -25,13 +25,14 @@ class CRM_CiviMobileAPI_Api_CiviMobileCmsRegistration_Create extends CRM_CiviMob 'api.Email.create' => ['email' => $this->validParams["email"]], 'first_name' => $this->validParams["first_name"], 'last_name' => $this->validParams["last_name"], + 'sequential' => 1 ]); } catch (CiviCRM_API3_Exception $e) { $transaction->rollback(); throw new api_Exception("CiviCRM creating Contact error: " . $e->getMessage(), 'creating_contact_error'); } - $this->validParams['contactID'] = $contact['id']; + $this->validParams['contactID'] = $contact['values'][0]['id']; if (!CRM_Core_BAO_CMSUser::create($this->validParams, 'email')) { $transaction->rollback(); @@ -43,9 +44,14 @@ class CRM_CiviMobileAPI_Api_CiviMobileCmsRegistration_Create extends CRM_CiviMob $message = 'User was registered.'; $successCode = 'registration_success'; - if ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL7) { - $isEmailVerification = variable_get('user_email_verification', TRUE); - $isAdministratorApproval = variable_get('user_register', TRUE) == 2; + if ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL7 || $currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL8) { + if ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL7) { + $isEmailVerification = variable_get('user_email_verification', TRUE); + $isAdministratorApproval = variable_get('user_register', TRUE) == 2; + } elseif ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL8) { + $isEmailVerification = \Drupal::config('user.settings')->get('verify_mail'); + $isAdministratorApproval = \Drupal::config('user.settings')->get('register') == 'visitors_admin_approval'; + } if ($isEmailVerification && $isAdministratorApproval) { $message = 'User was registered. You must to check your email to verify your account. Administrator will check your account and confirm user registration request.'; diff --git a/CRM/CiviMobileAPI/Api/CiviMobileParticipantPaymentLink/Get.php b/CRM/CiviMobileAPI/Api/CiviMobileParticipantPaymentLink/Get.php index ca21ea1..d463330 100644 --- a/CRM/CiviMobileAPI/Api/CiviMobileParticipantPaymentLink/Get.php +++ b/CRM/CiviMobileAPI/Api/CiviMobileParticipantPaymentLink/Get.php @@ -42,9 +42,14 @@ class CRM_CiviMobileAPI_Api_CiviMobileParticipantPaymentLink_Get extends CRM_Civ ); $currentCMS = CRM_CiviMobileAPI_Utils_CmsUser::getInstance()->getSystem(); + $config = CRM_Core_Config::singleton(); $url = CRM_Utils_System::url('civicrm/event/register', 'id=' . $this->validParams['event_id'] . '&reset=1&cmbHash=' . $cmbHash); - if ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_JOOMLA ) { + + if ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_JOOMLA) { $url = str_replace("administrator/", "", $url); + } elseif ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL8) { + $absoluteUrl = CRM_Utils_System::url('civicrm/event/register', 'id=' . $this->validParams['event_id'] . '&reset=1&cmbHash=' . $cmbHash, TRUE, NULL, FALSE); + $url = '/' . str_replace($config->userFrameworkBaseURL, "", $absoluteUrl); } $result['link'] = html_entity_decode($url); diff --git a/CRM/CiviMobileAPI/Page/Auth.php b/CRM/CiviMobileAPI/Page/Auth.php index 8c3246b..d43a587 100644 --- a/CRM/CiviMobileAPI/Page/Auth.php +++ b/CRM/CiviMobileAPI/Page/Auth.php @@ -109,6 +109,9 @@ class CRM_CiviMobileAPI_Page_Auth extends CRM_Core_Page { $isBlocked = TRUE; } break; + case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL8: + $isBlocked = $user->isBlocked(); + break; } return $isBlocked; diff --git a/CRM/CiviMobileAPI/Utils/Cms.php b/CRM/CiviMobileAPI/Utils/Cms.php index 9c38845..68584cf 100644 --- a/CRM/CiviMobileAPI/Utils/Cms.php +++ b/CRM/CiviMobileAPI/Utils/Cms.php @@ -22,6 +22,9 @@ class CRM_CiviMobileAPI_Utils_Cms { elseif ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL6 || $currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL7) { return variable_get('site_name', ''); } + elseif ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL8) { + return \Drupal::config('system.site')->get("name"); + } return null; } @@ -41,7 +44,7 @@ class CRM_CiviMobileAPI_Utils_Cms { elseif ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_JOOMLA ) { return str_replace("/administrator/", "/", $config->userFrameworkBaseURL) . "?format=feed&type=rss"; } - elseif ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL6 || $currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL7) { + elseif ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL6 || $currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL7 || $currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL8) { return $config->userFrameworkBaseURL . "rss.xml"; } diff --git a/CRM/CiviMobileAPI/Utils/Cms/Registration.php b/CRM/CiviMobileAPI/Utils/Cms/Registration.php index 7f4106f..526ad9d 100644 --- a/CRM/CiviMobileAPI/Utils/Cms/Registration.php +++ b/CRM/CiviMobileAPI/Utils/Cms/Registration.php @@ -18,6 +18,7 @@ class CRM_CiviMobileAPI_Utils_Cms_Registration { */ public static function minPasswordLength() { switch (CRM_CiviMobileAPI_Utils_CmsUser::getInstance()->getSystem()) { + case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL8: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL7: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL6: $minPasswordLength = CRM_CiviMobileAPI_Utils_Cms_Registration_Drupal::minPasswordLength(); @@ -40,6 +41,7 @@ class CRM_CiviMobileAPI_Utils_Cms_Registration { */ public static function maxPasswordLength() { switch (CRM_CiviMobileAPI_Utils_CmsUser::getInstance()->getSystem()) { + case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL8: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL7: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL6: $maxPasswordLength = CRM_CiviMobileAPI_Utils_Cms_Registration_Drupal::maxPasswordLength(); @@ -62,6 +64,7 @@ class CRM_CiviMobileAPI_Utils_Cms_Registration { */ public static function minUsernameLength() { switch (CRM_CiviMobileAPI_Utils_CmsUser::getInstance()->getSystem()) { + case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL8: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL7: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL6: $minUsernameLength = CRM_CiviMobileAPI_Utils_Cms_Registration_Drupal::minUsernameLength(); @@ -84,6 +87,7 @@ class CRM_CiviMobileAPI_Utils_Cms_Registration { */ public static function maxUsernameLength() { switch (CRM_CiviMobileAPI_Utils_CmsUser::getInstance()->getSystem()) { + case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL8: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL7: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL6: $maxUsernameLength = CRM_CiviMobileAPI_Utils_Cms_Registration_Drupal::maxUsernameLength(); @@ -106,6 +110,7 @@ class CRM_CiviMobileAPI_Utils_Cms_Registration { */ public static function minPasswordIntegers() { switch (CRM_CiviMobileAPI_Utils_CmsUser::getInstance()->getSystem()) { + case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL8: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL7: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL6: $minPasswordIntegers = CRM_CiviMobileAPI_Utils_Cms_Registration_Drupal::minPasswordIntegers(); @@ -128,6 +133,7 @@ class CRM_CiviMobileAPI_Utils_Cms_Registration { */ public static function minPasswordSymbols() { switch (CRM_CiviMobileAPI_Utils_CmsUser::getInstance()->getSystem()) { + case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL8: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL7: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL6: $minPasswordSymbols = CRM_CiviMobileAPI_Utils_Cms_Registration_Drupal::minPasswordSymbols(); @@ -150,6 +156,7 @@ class CRM_CiviMobileAPI_Utils_Cms_Registration { */ public static function minPasswordUpperCase() { switch (CRM_CiviMobileAPI_Utils_CmsUser::getInstance()->getSystem()) { + case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL8: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL7: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL6: $minPasswordUpperCase = CRM_CiviMobileAPI_Utils_Cms_Registration_Drupal::minPasswordUpperCase(); @@ -172,6 +179,7 @@ class CRM_CiviMobileAPI_Utils_Cms_Registration { */ public static function minPasswordLowerCase() { switch (CRM_CiviMobileAPI_Utils_CmsUser::getInstance()->getSystem()) { + case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL8: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL7: case CRM_CiviMobileAPI_Utils_CmsUser::CMS_DRUPAL6: $minPasswordLowerCase = CRM_CiviMobileAPI_Utils_Cms_Registration_Drupal::minPasswordLowerCase(); diff --git a/CRM/CiviMobileAPI/Utils/CmsUser.php b/CRM/CiviMobileAPI/Utils/CmsUser.php index ec4922f..266ca2c 100644 --- a/CRM/CiviMobileAPI/Utils/CmsUser.php +++ b/CRM/CiviMobileAPI/Utils/CmsUser.php @@ -5,6 +5,11 @@ class CRM_CiviMobileAPI_Utils_CmsUser { + /** + * Drupal 8 CMS + */ + const CMS_DRUPAL8 = 'Drupal8'; + /** * Drupal 7 CMS */ @@ -138,6 +143,7 @@ class CRM_CiviMobileAPI_Utils_CmsUser { */ public function validateCMS() { return in_array($this->system, [ + self::CMS_DRUPAL8, self::CMS_DRUPAL7, self::CMS_WORDPRESS, self::CMS_JOOMLA, @@ -155,6 +161,15 @@ class CRM_CiviMobileAPI_Utils_CmsUser { public function validateAccount($email, $password) { $uid = FALSE; switch ($this->system) { + case self::CMS_DRUPAL8: + $account = $this->getDrupalAccount($email); + if($account) { + $password_hasher = \Drupal::service('password'); + if ($password_hasher->check($password, $account->getPassword())) { + $uid = $account->uid->value; + } + } + break; case self::CMS_DRUPAL7: $account = $this->getDrupalAccount($email); require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc'); @@ -201,6 +216,7 @@ class CRM_CiviMobileAPI_Utils_CmsUser { public function searchAccount($identificator) { $account = FALSE; switch ($this->system) { + case self::CMS_DRUPAL8: case self::CMS_DRUPAL7: $account = $this->getDrupalAccount($identificator); break; diff --git a/CRM/CiviMobileAPI/Utils/File.php b/CRM/CiviMobileAPI/Utils/File.php index 9231ea5..b55d8d2 100644 --- a/CRM/CiviMobileAPI/Utils/File.php +++ b/CRM/CiviMobileAPI/Utils/File.php @@ -71,37 +71,21 @@ class CRM_CiviMobileAPI_Utils_File { public static function getFileUrl($entityId, $entityTable, $filename) { $url = ''; $files = CRM_Core_BAO_File::getEntityFile($entityTable, $entityId); - $config = CRM_Core_Config::singleton(); + $currentCMS = CRM_CiviMobileAPI_Utils_CmsUser::getInstance()->getSystem(); foreach ($files as $file) { if ((!empty($file['fileName']) && $file['fileName'] == $filename) || (!empty($file['cleanName']) && $file['cleanName'] == $filename)) { - $url = $file['url']; + $url = CRM_Utils_System::url('civicrm/file', ['filename' => $filename, 'mime-type' => $file['mime_type']], TRUE); } } - if (substr($url, 0, 1) == '/') { - $url = substr($url, 1); - } - //CiviCRM sometimes generate url with domain - $url = str_replace($config->userFrameworkBaseURL, "", $url); - - $url = urldecode($url); - - $currentCMS = CRM_CiviMobileAPI_Utils_CmsUser::getInstance()->getSystem(); - if ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_WORDPRESS ) { + if ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_JOOMLA) { + $url = preg_replace('/administrator\//', 'index.php', $url); + } elseif ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_WORDPRESS ) { $url = str_replace("wp-admin/admin.php", "index.php", $url); } - if ($currentCMS == CRM_CiviMobileAPI_Utils_CmsUser::CMS_JOOMLA ) { - $url = str_replace("administrator/", "", $config->userFrameworkBaseURL) . $url; - $url = str_replace("administrator/", "index.php", $url); - } else { - $url = $config->userFrameworkBaseURL . $url; - } - - $url = htmlspecialchars_decode($url); - return $url; } diff --git a/README.md b/README.md index bde8ae4..b9c0d3c 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ The latest CiviMobile application can be downloaded from [AppStore](https://itun - CiviCRM v4.7.x+ - PHP v5.4+ -- Drupal 7.x +- Drupal 7.x, 8.x - Joomla 3.x (CiviCRM 5.1+) - WordPress 4.8+ diff --git a/css/civimobileapiSettings.css b/css/civimobileapiSettings.css index cb7af63..f8a9b8c 100644 --- a/css/civimobileapiSettings.css +++ b/css/civimobileapiSettings.css @@ -15,3 +15,7 @@ .crm-container table.form-layout-compressed { width: 100%; } + +.crm-container table.form-layout-compressed td.label { + display: table-cell; +} diff --git a/info.xml b/info.xml index ef92781..9027cf7 100644 --- a/info.xml +++ b/info.xml @@ -14,8 +14,8 @@ https://civimobile.org http://www.gnu.org/licenses/agpl-3.0.html - 2020-09-02 - 5.3.0 + 2020-12-07 + 5.4.0 4.7 5.20 -- GitLab