diff --git a/CRM/CiviMobileAPI/Api/CiviMobileCustomFields/Get.php b/CRM/CiviMobileAPI/Api/CiviMobileCustomFields/Get.php index ccdc61da6ce4078b01384917a0153bcb414f147f..501e79a972f095966726b79dd26f95eca5c12340 100644 --- a/CRM/CiviMobileAPI/Api/CiviMobileCustomFields/Get.php +++ b/CRM/CiviMobileAPI/Api/CiviMobileCustomFields/Get.php @@ -23,6 +23,9 @@ class CRM_CiviMobileAPI_Api_CiviMobileCustomFields_Get extends CRM_CiviMobileAPI 'Household' => [ 'find_for' => ['Contact','Household'], ], + 'Activity' => [ + 'find_for' => ['Activity'], + ], ]; /** @@ -41,6 +44,7 @@ class CRM_CiviMobileAPI_Api_CiviMobileCustomFields_Get extends CRM_CiviMobileAPI return [ 'find_for' => self::$entityMap[$params['entity']]['find_for'], 'entity_id' => $params['entity_id'], + 'extends_entity_column_value' => !empty($params['extends_entity_column_value']) ? $params['extends_entity_column_value'] : NULL ]; } @@ -51,32 +55,50 @@ class CRM_CiviMobileAPI_Api_CiviMobileCustomFields_Get extends CRM_CiviMobileAPI */ public function getResult() { $result = []; + $anyActivitiesCustomGroups = []; try { $customGroups = civicrm_api3('CustomGroup', 'get', [ 'sequential' => 1, 'extends' => ['IN' => $this->validParams['find_for']], 'is_active' => 1, + 'extends_entity_column_value' => $this->validParams['extends_entity_column_value'], 'options' => ['limit' => 0], - ]); + ])['values']; } catch (CiviCRM_API3_Exception $e) { return []; } - if (empty($customGroups['values'])) { + if ($this->validParams['find_for'][0] == "Activity" && !empty($this->validParams['extends_entity_column_value'])) { + try { + $anyActivitiesCustomGroups = civicrm_api3('CustomGroup', 'get', [ + 'sequential' => 1, + 'extends' => "Activity", + 'is_active' => 1, + 'extends_entity_column_value' => ['IS NULL' => 1], + 'options' => ['limit' => 0], + ])['values']; + } catch (CiviCRM_API3_Exception $e) { + return []; + } + } + + $customGroups = array_merge($customGroups, $anyActivitiesCustomGroups); + + if (empty($customGroups)) { return []; } if (!CRM_Core_Permission::check('administer CiviCRM') && !CRM_Core_Permission::check('access all custom data')) { $accessibleCustomGroupsToView = CRM_Core_Permission::customGroup(CRM_Core_Permission::VIEW); - foreach ($customGroups['values'] as $customGroup) { + foreach ($customGroups as $customGroup) { if (in_array($customGroup['id'], $accessibleCustomGroupsToView)) { $result[] = $this->prepareCustomGroup($customGroup); } } } else { - foreach ($customGroups['values'] as $customGroup) { + foreach ($customGroups as $customGroup) { $result[] = $this->prepareCustomGroup($customGroup); } } @@ -92,6 +114,8 @@ class CRM_CiviMobileAPI_Api_CiviMobileCustomFields_Get extends CRM_CiviMobileAPI * @return array */ private function prepareCustomGroup($customGroup) { + $gotvCustomFieldId = CRM_CiviMobileAPI_Utils_CustomField::getId(CRM_CiviMobileAPI_Install_Entity_CustomGroup::SURVEY,CRM_CiviMobileAPI_Install_Entity_CustomField::SURVEY_GOTV_STATUS); + $customGroupData = [ 'id' => $customGroup['id'], 'name' => $customGroup['name'], @@ -105,6 +129,7 @@ class CRM_CiviMobileAPI_Api_CiviMobileCustomFields_Get extends CRM_CiviMobileAPI try { $customFields = civicrm_api3('CustomField', 'get', [ 'sequential' => 1, + 'id' => ['!=' => $gotvCustomFieldId], 'custom_group_id' => $customGroup['id'], 'options' => ['limit' => 0], 'is_active' => 1, diff --git a/CRM/CiviMobileAPI/Api/CiviMobilePublicParticipant/Create.php b/CRM/CiviMobileAPI/Api/CiviMobilePublicParticipant/Create.php index 814665ccf8dc4e4cdde43a19c87e74e074167413..688802e818b181eeb87156a58bcfd39d58e9db93 100644 --- a/CRM/CiviMobileAPI/Api/CiviMobilePublicParticipant/Create.php +++ b/CRM/CiviMobileAPI/Api/CiviMobilePublicParticipant/Create.php @@ -31,7 +31,9 @@ class CRM_CiviMobileAPI_Api_CiviMobilePublicParticipant_Create extends CRM_CiviM $result["values"][$key]['participant_public_key'] = $publicKey; } - return $result["values"]; + $this->sendEmail($result['id']); + + return $result['values']; } /** @@ -56,7 +58,8 @@ class CRM_CiviMobileAPI_Api_CiviMobilePublicParticipant_Create extends CRM_CiviM $result = [ 'event_id' => $params["event_id"], 'contact_id' => $contactId, - 'default_role_id' => $event->default_role_id + 'default_role_id' => $event->default_role_id, + 'contact_email' => $params['contact_email'] ]; return $result; @@ -133,4 +136,50 @@ class CRM_CiviMobileAPI_Api_CiviMobilePublicParticipant_Create extends CRM_CiviM } } + /** + * Send email for participant + * + * @param $participantId + */ + private function sendEmail($participantId) { + try { + $event = civicrm_api3('Event', 'getsingle', [ + 'id' => $this->validParams["event_id"] + ]); + } catch (Exception $e) { + return; + } + + try { + $participant = civicrm_api3('Participant', 'getsingle', [ + 'id' => $participantId + ]); + } catch (Exception $e) { + return; + } + + $emailParams = [ + 'participant' => $participant, + 'event' => $event, + 'params' => [ + $participantId => [ + 'first_name' => $participant['first_name'], + 'last_name' => $participant['last_name'], + 'email-Primary' => $this->validParams['contact_email'], + 'is_primary' => 1, + 'is_pay_later' => $event['is_pay_later'], + 'contact_id' => $participant['contact_id'], + 'defaultRole' => $event['default_role_id'], + 'participant_role_id' => $participant['participant_role_id'], + 'description' => E::ts('Event Registration') . ' ' . $event['title'], + ] + ] + ]; + + $smarty = CRM_Core_Smarty::singleton(); + $smarty->assign('event', $event); + + CRM_Event_BAO_Event::sendMail($participant["contact_id"], $emailParams, $participant['participant_id']); + } + } diff --git a/CRM/CiviMobileAPI/ApiWrapper/Contact.php b/CRM/CiviMobileAPI/ApiWrapper/Contact.php index 906bf59ac4e9f643ca23f55e04125e85a8a43e66..670cb064c984e3d5cf998ef4b2aebda5f7785a41 100644 --- a/CRM/CiviMobileAPI/ApiWrapper/Contact.php +++ b/CRM/CiviMobileAPI/ApiWrapper/Contact.php @@ -28,6 +28,7 @@ class CRM_CiviMobileAPI_ApiWrapper_Contact implements API_Wrapper { if ($apiRequest['action'] == 'getsingle') { $result['can_edit'] = CRM_Contact_BAO_Contact_Permission::allow($result['id'], CRM_Core_Permission::EDIT) ? 1 : 0; + $result['can_view'] = CRM_Contact_BAO_Contact_Permission::allow($result['id']) ? 1 : 0; if (empty($result['current_employer_id']) && !empty($result['contact_id'])) { $result['current_employer_id'] = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $result['contact_id'], 'employer_id'); diff --git a/CRM/CiviMobileAPI/ApiWrapper/Contribution.php b/CRM/CiviMobileAPI/ApiWrapper/Contribution.php index a287eceb226fda79f4c82863ba69916d4a3103c1..5fb0a156c1451bb135da3d532c98cbd5aa752272 100644 --- a/CRM/CiviMobileAPI/ApiWrapper/Contribution.php +++ b/CRM/CiviMobileAPI/ApiWrapper/Contribution.php @@ -19,6 +19,22 @@ class CRM_CiviMobileAPI_ApiWrapper_Contribution implements API_Wrapper { } $apiRequest['params']['return'] = array_unique(array_merge($apiRequest['params']['return'], ['currency', 'financial_type_id'])); } + if (is_mobile_request()) { + if ($apiRequest['params']['contact_display_name'] + || $apiRequest['params']['contact_type'] + || $apiRequest['params']['contact_tags'] + || $apiRequest['params']['contact_groups'] + ) { + + $contactsId = (new CRM_CiviMobileAPI_Utils_ContributionFilter)->filterContributionContacts($apiRequest['params']); + + if (!empty($contactsId)) { + $apiRequest['params']['contact_id'] = ['IN' => $contactsId]; + } else { + $apiRequest['params']['contact_id'] = ['IS NULL' => 1]; + } + } + } return $apiRequest; } @@ -31,16 +47,86 @@ class CRM_CiviMobileAPI_ApiWrapper_Contribution implements API_Wrapper { * @return array */ public function toApiOutput($apiRequest, $result) { - if (is_string($apiRequest['params']['return'])) { - $apiRequest['params']['return'] = explode(',', $apiRequest['params']['return']); - } + if (is_mobile_request()) { + if (!empty($result['values'])) { + $contactsId = $this->getContributionContactsId($result['values']); + + try { + $contacts = civicrm_api3('Contact', 'get', [ + 'sequential' => 1, + 'id' => ["IN" => $contactsId], + 'options' => ['limit' => 0], + ])['values']; + } catch (CiviCRM_API3_Exception $e) { + $contacts = []; + } + + if (!empty($contacts)) { + foreach ($contacts as $contact) { + foreach ($result['values'] as &$contribution) { + if ($contact['id'] == $contribution['contact_id']) { + $contribution['contact_display_name'] = !empty($contact['display_name']) ? $contact['display_name'] : ''; + $contribution['contact_first_name'] = !empty($contact['first_name']) ? $contact['first_name'] : ''; + $contribution['contact_last_name'] = !empty($contact['last_name']) ? $contact['last_name'] : ''; + $contribution['contact_type'] = !empty($contact['contact_type']) ? $contact['contact_type'] : ''; + $contribution['contact_image_URL'] = !empty($contact['image_URL']) ? $contact['image_URL'] : ''; + } + } + } + } + } - $result = $this->fillFinancialTypeName($apiRequest, $result); - $result = $this->fillFormatTotalAmount($apiRequest, $result); + if (is_string($apiRequest['params']['return'])) { + $apiRequest['params']['return'] = explode(',', $apiRequest['params']['return']); + } + $result = $this->fillFinancialTypeName($apiRequest, $result); + $result = $this->fillFormatTotalAmount($apiRequest, $result); + $result['max_total_amount'] = $this->getMaxTotalAmount(); + } return $result; } + /** + * Get contribution contact's Id + * + * @param $contributions + * @return array + */ + public function getContributionContactsId($contributions) { + $contactsId = []; + if (!empty($contributions)) { + foreach ($contributions as $contribution) { + $contactsId[] = $contribution['contact_id']; + } + } + + return $contactsId; + } + + /** + * Get max total amount of the contributions + * + * @return int + */ + public function getMaxTotalAmount() { + $select = 'SELECT MAX(civicrm_contribution.total_amount) as max_total_amount'; + $from = ' FROM civicrm_contribution'; + $sql = $select . $from; + + $maxTotalAmount = 0; + try { + $dao = CRM_Core_DAO::executeQuery($sql); + while ($dao->fetch()) { + $maxTotalAmount = (int)$dao->max_total_amount; + } + } catch (Exception $e) { + return $maxTotalAmount; + } + + return $maxTotalAmount; + } + /** * Check with API version is being called. * @@ -115,4 +201,5 @@ class CRM_CiviMobileAPI_ApiWrapper_Contribution implements API_Wrapper { return CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_FinancialType', $financialTypeId, 'name'); } } + } diff --git a/CRM/CiviMobileAPI/ApiWrapper/ContributionPage.php b/CRM/CiviMobileAPI/ApiWrapper/ContributionPage.php new file mode 100644 index 0000000000000000000000000000000000000000..8dedab18d73816af8fa33ef5ff89eb293bc5ffac --- /dev/null +++ b/CRM/CiviMobileAPI/ApiWrapper/ContributionPage.php @@ -0,0 +1,38 @@ + $event['id'], ])['count']; + $result['values'][$key]['is_allow_mobile_registration'] = isset($result['values'][$key][$isAllowMobileRegistration]) ? $result['values'][$key][$isAllowMobileRegistration] : 0; + if (isset($event['currency'])) { if (!empty($event['currency'])) { $result['values'][$key]['currency_symbol'] = CRM_CiviMobileAPI_Utils_Currency::getSymbolByName($event['currency']); diff --git a/CRM/CiviMobileAPI/ApiWrapper/Membership/Get.php b/CRM/CiviMobileAPI/ApiWrapper/Membership/Get.php index 77bb0193e8957be402a22aa4228baa529e955989..3d9ccbc14948402ad7235a48c9397b132c4126f5 100644 --- a/CRM/CiviMobileAPI/ApiWrapper/Membership/Get.php +++ b/CRM/CiviMobileAPI/ApiWrapper/Membership/Get.php @@ -79,12 +79,13 @@ class CRM_CiviMobileAPI_ApiWrapper_Membership_Get implements API_Wrapper { if (!empty($apiRequest['params']['membership_contact_id'])) { try { $lastPayment = civicrm_api3('MembershipPayment', 'getsingle', [ - 'return' => ["contribution_id.receive_date", "membership_id.contact_id"], + 'return' => ["contribution_id.receive_date", "membership_id.contact_id", "contribution_id.payment_instrument_id"], 'membership_id' => $membership['id'], 'membership_id.contact_id' => $apiRequest['params']['membership_contact_id'], 'options' => ['sort' => "contribution_id.receive_date desc", 'limit' => 1], ]); + $additionalInfo['payment_instrument'] = CRM_CiviMobileAPI_Utils_Membership::getPaymentInstrumentLabel($lastPayment['contribution_id.payment_instrument_id']); $additionalInfo['last_payment_receive_date'] = $lastPayment['contribution_id.receive_date']; } catch (Exception $e) {} } diff --git a/CRM/CiviMobileAPI/Form/CalendarSettings.php b/CRM/CiviMobileAPI/Form/CalendarSettings.php index ad4bcd3c68e2b824fcc187d31a1248b0c401e047..42561e78f6e77d79755a767c00b122fd8261bc7d 100644 --- a/CRM/CiviMobileAPI/Form/CalendarSettings.php +++ b/CRM/CiviMobileAPI/Form/CalendarSettings.php @@ -172,7 +172,7 @@ class CRM_CiviMobileAPI_Form_CalendarSettings extends CRM_Core_Form { $prefixedSettings = []; foreach ($settings as $name => $value) { - $prefixedSettings[CRM_CiviMobileAPI_Settings_Calendar_CiviMobile::getName($name, TRUE)] = $value; + $prefixedSettings[CRM_CiviMobileAPI_Settings_Calendar_CiviMobile::getName($name, TRUE)] = !empty($value) ? $value : NULL; } if (!empty($prefixedSettings)) { diff --git a/CRM/CiviMobileAPI/Form/Settings.php b/CRM/CiviMobileAPI/Form/Settings.php index ad358bd8f5444015f952872c6a9f3275240ffb75..5af5f8b2b38ed0ab491ff64b68126950b11bc858 100644 --- a/CRM/CiviMobileAPI/Form/Settings.php +++ b/CRM/CiviMobileAPI/Form/Settings.php @@ -49,6 +49,9 @@ class CRM_CiviMobileAPI_Form_Settings extends CRM_Core_Form { if (in_array('CiviCampaign', $enabledComponents)) { $possibleItemsToDisplayInPublicArea[] = 'Petitions'; } + if (in_array('CiviContribute', $enabledComponents)) { + $possibleItemsToDisplayInPublicArea[] = 'Donations'; + } $this->assign('isWritable', CRM_CiviMobileAPI_Utils_Extension::directoryIsWritable()); $this->assign('serverKeyValidMessage', $serverKeyValidMessage); diff --git a/CRM/CiviMobileAPI/Install/Entity/CustomField.php b/CRM/CiviMobileAPI/Install/Entity/CustomField.php index 598c2f12e6d2f8f52e4ad8269af59c3a3f29dbb5..0aa758405bb67ad73fd7f77919b2675e0b09e58f 100644 --- a/CRM/CiviMobileAPI/Install/Entity/CustomField.php +++ b/CRM/CiviMobileAPI/Install/Entity/CustomField.php @@ -23,6 +23,7 @@ class CRM_CiviMobileAPI_Install_Entity_CustomField extends CRM_CiviMobileAPI_Ins const PUBLIC_KEY = 'public_key'; const AGENDA_PARTICIPANT_BIO = 'civi_mobile_agenda_participant_bio'; const SURVEY_GOTV_STATUS = 'civi_mobile_survey_gotv_status'; + const IS_MOBILE_EVENT_REGISTRATION = 'civi_mobile_is_event_mobile_registration'; /** * Params for checking Entity existence @@ -96,6 +97,15 @@ class CRM_CiviMobileAPI_Install_Entity_CustomField extends CRM_CiviMobileAPI_Ins 'is_view' => 1, 'default_value' => 0 ], + [ + 'name' => self::IS_MOBILE_EVENT_REGISTRATION, + 'label' => E::ts('Allow Online registration in CiviMobile?'), + 'custom_group_id' => CRM_CiviMobileAPI_Install_Entity_CustomGroup::ALLOW_MOBILE_REGISTRATION, + 'html_type' => 'Radio', + 'data_type' => 'Boolean', + 'is_view' => 1, + 'default_value' => 1 + ], ]; } diff --git a/CRM/CiviMobileAPI/Install/Entity/CustomGroup.php b/CRM/CiviMobileAPI/Install/Entity/CustomGroup.php index a97b97f80efebd06263fa363bc73b88e28493a6f..60c0563964520b87009490b789d09a03bd5f2901 100644 --- a/CRM/CiviMobileAPI/Install/Entity/CustomGroup.php +++ b/CRM/CiviMobileAPI/Install/Entity/CustomGroup.php @@ -15,6 +15,7 @@ class CRM_CiviMobileAPI_Install_Entity_CustomGroup extends CRM_CiviMobileAPI_Ins const PUBLIC_INFO = 'civi_mobile_public_info'; const AGENDA_PARTICIPANT = 'civi_mobile_agenda_participant'; const SURVEY = 'civi_mobile_survey'; + const ALLOW_MOBILE_REGISTRATION = 'civi_mobile_allow_registration'; /** * Entity name @@ -70,6 +71,15 @@ class CRM_CiviMobileAPI_Install_Entity_CustomGroup extends CRM_CiviMobileAPI_Ins 'is_public' => 0, 'is_reserved' => 1 ], + [ + 'name' => self::ALLOW_MOBILE_REGISTRATION, + 'title' => E::ts('Allow Online registration in CiviMobile'), + 'extends' => 'Event', + 'is_public' => 1, + 'style' => 'Inline', + 'collapse_display' => 1, + 'is_reserved' => 1 + ], ]; } diff --git a/CRM/CiviMobileAPI/Install/Entity/OptionGroup.php b/CRM/CiviMobileAPI/Install/Entity/OptionGroup.php new file mode 100644 index 0000000000000000000000000000000000000000..3c890488ec82c795fb6d352851d387c9d4304a54 --- /dev/null +++ b/CRM/CiviMobileAPI/Install/Entity/OptionGroup.php @@ -0,0 +1,43 @@ +entityParamList = [ + [ + 'name' => self::TABS, + 'title' => E::ts('CiviMobile Tabs'), + 'data_type' => 'String', + 'is_reserved' => 1, + 'is_locked' => 1 + ] + ]; + } + +} diff --git a/CRM/CiviMobileAPI/Install/Entity/OptionValue.php b/CRM/CiviMobileAPI/Install/Entity/OptionValue.php new file mode 100644 index 0000000000000000000000000000000000000000..9a566fb0fe4ec5f5f329393c7059068f35d78999 --- /dev/null +++ b/CRM/CiviMobileAPI/Install/Entity/OptionValue.php @@ -0,0 +1,131 @@ +entityParamList = [ + [ + 'option_group_id' => CRM_CiviMobileAPI_Install_Entity_OptionGroup::TABS, + 'label' => E::ts('Calendar'), + 'name' => self::TAB_CALENDAR, + 'value' => self::TAB_CALENDAR, + 'weight' => 1, + ], + [ + 'option_group_id' => CRM_CiviMobileAPI_Install_Entity_OptionGroup::TABS, + 'label' => E::ts('Events'), + 'name' => self::TAB_EVENTS, + 'value' => self::TAB_EVENTS, + 'weight' => 2, + ], + [ + 'option_group_id' => CRM_CiviMobileAPI_Install_Entity_OptionGroup::TABS, + 'label' => E::ts('Cases'), + 'name' => self::TAB_CASES, + 'value' => self::TAB_CASES, + 'weight' => 3, + ], + [ + 'option_group_id' => CRM_CiviMobileAPI_Install_Entity_OptionGroup::TABS, + 'label' => E::ts('Activities'), + 'name' => self::TAB_ACTIVITIES, + 'value' => self::TAB_ACTIVITIES, + 'weight' => 4, + ], + [ + 'option_group_id' => CRM_CiviMobileAPI_Install_Entity_OptionGroup::TABS, + 'label' => E::ts('Contacts'), + 'name' => self::TAB_CONTACTS, + 'value' => self::TAB_CONTACTS, + 'weight' => 5, + ], + [ + 'option_group_id' => CRM_CiviMobileAPI_Install_Entity_OptionGroup::TABS, + 'label' => E::ts('Relationships'), + 'name' => self::TAB_RELATIONSHIPS, + 'value' => self::TAB_RELATIONSHIPS, + 'weight' => 6, + ], + [ + 'option_group_id' => CRM_CiviMobileAPI_Install_Entity_OptionGroup::TABS, + 'label' => E::ts('Memberships'), + 'name' => self::TAB_MEMBERSHIPS, + 'value' => self::TAB_MEMBERSHIPS, + 'weight' => 7, + ], + [ + 'option_group_id' => CRM_CiviMobileAPI_Install_Entity_OptionGroup::TABS, + 'label' => E::ts('Contributions'), + 'name' => self::TAB_CONTRIBUTIONS, + 'value' => self::TAB_CONTRIBUTIONS, + 'weight' => 8, + ], + [ + 'option_group_id' => CRM_CiviMobileAPI_Install_Entity_OptionGroup::TABS, + 'label' => E::ts('Notes'), + 'name' => self::TAB_NOTES, + 'value' => self::TAB_NOTES, + 'weight' => 9, + ], + [ + 'option_group_id' => CRM_CiviMobileAPI_Install_Entity_OptionGroup::TABS, + 'label' => E::ts('Groups'), + 'name' => self::TAB_GROUPS, + 'value' => self::TAB_GROUPS, + 'weight' => 10, + ], + [ + 'option_group_id' => CRM_CiviMobileAPI_Install_Entity_OptionGroup::TABS, + 'label' => E::ts('Tags'), + 'name' => self::TAB_TAGS, + 'value' => self::TAB_TAGS, + 'weight' => 11, + ], + [ + 'option_group_id' => CRM_CiviMobileAPI_Install_Entity_OptionGroup::TABS, + 'label' => E::ts('Surveys'), + 'name' => self::TAB_SURVEYS, + 'value' => self::TAB_SURVEYS, + 'weight' => 12, + ], + ]; + } + +} diff --git a/CRM/CiviMobileAPI/Install/Install.php b/CRM/CiviMobileAPI/Install/Install.php index 5ee6fa8ff1220272c504afdb2ebf464948813967..64016b2d42c755eb6b71196ef87b87452edb1c13 100644 --- a/CRM/CiviMobileAPI/Install/Install.php +++ b/CRM/CiviMobileAPI/Install/Install.php @@ -6,11 +6,15 @@ class CRM_CiviMobileAPI_Install_Install { * Installs requirements for extension */ public static function run() { + + (new CRM_CiviMobileAPI_Install_Entity_OptionGroup())->install(); + (new CRM_CiviMobileAPI_Install_Entity_OptionValue())->install(); (new CRM_CiviMobileAPI_Install_Entity_CustomGroup())->install(); (new CRM_CiviMobileAPI_Install_Entity_CustomField())->install(); (new CRM_CiviMobileAPI_Install_Entity_UpdateMessageTemplate())->install(); (new CRM_CiviMobileAPI_Install_Entity_ApplicationQrCode())->install(); (new CRM_CiviMobileAPI_Install_Entity_Job())->install(); + } /** @@ -34,6 +38,8 @@ class CRM_CiviMobileAPI_Install_Install { */ public static function uninstall() { (new CRM_CiviMobileAPI_Install_Entity_Job())->deleteAll(); + (new CRM_CiviMobileAPI_Install_Entity_OptionValue())->deleteAll(); + (new CRM_CiviMobileAPI_Install_Entity_OptionGroup())->deleteAll(); } } diff --git a/CRM/CiviMobileAPI/Page/PublicApi/Api.php b/CRM/CiviMobileAPI/Page/PublicApi/Api.php index 8079a1a0fe6913e83b86a1044aae6f7d22b5719c..172bb46628131f5ab9bd39c9797bbc4e25b677ca 100644 --- a/CRM/CiviMobileAPI/Page/PublicApi/Api.php +++ b/CRM/CiviMobileAPI/Page/PublicApi/Api.php @@ -43,6 +43,7 @@ class CRM_CiviMobileAPI_Page_PublicApi_Api extends CRM_CiviMobileAPI_Page_Public 'end_date', 'event_end_date', 'is_online_registration', + 'is_allow_mobile_registration', 'event_full_text', 'is_monetary', 'is_show_location', @@ -475,6 +476,39 @@ class CRM_CiviMobileAPI_Page_PublicApi_Api extends CRM_CiviMobileAPI_Page_Public ] ] ], + [ + 'entityName' => 'ContributionPage', + 'availableActions' => [ + [ + 'actionName' => 'get', + 'actionPermissions' => ['access CiviContribute', 'make online contributions', 'access CiviCRM'], + 'availableParams' => [ + 'id', + 'financial_type_id', + 'options', + 'start_date' + ], + 'availableReturnFields' => [ + 'id', + 'financial_type_id', + 'title', + 'payment_processor', + 'is_active', + 'start_date', + 'end_date', + 'contribution_type_id', + 'page_URL', + ], + 'middleware' => [ + [ + 'class' => 'CRM_CiviMobileAPI_Page_PublicApi_Middleware', + 'method' => 'isAllowPublicInfoApi', + ], + ], + 'transforms' => [] + ] + ] + ], [ 'entityName' => 'CiviMobileSurvey', 'availableActions' => [ diff --git a/CRM/CiviMobileAPI/Page/PublicSettings.php b/CRM/CiviMobileAPI/Page/PublicSettings.php index e615ceb26bd83cbdea03add3e1f456df8ae73dce..4cd93f2a7340d542052554ab9eb74dd286a5d527 100644 --- a/CRM/CiviMobileAPI/Page/PublicSettings.php +++ b/CRM/CiviMobileAPI/Page/PublicSettings.php @@ -49,6 +49,7 @@ class CRM_CiviMobileAPI_Page_PublicSettings extends CRM_Core_Page { 'max_first_name_length' => CMSRegistration::maxFirstNameLength(), 'max_last_name_length' => CMSRegistration::maxLastNameLength(), ], + 'tabs' => CRM_CiviMobileAPI_Utils_Extension::getActiveCiviMobileTabs(), 'permissions' => CRM_CiviMobileAPI_Utils_Permission::getAnonymous(), ]; diff --git a/CRM/CiviMobileAPI/Upgrader.php b/CRM/CiviMobileAPI/Upgrader.php index 17ebc28d4471195ab0b4f6d82eeb4c514228761d..478e67b46cfd6fb276550f7e84b9ad1ca3d5b7e4 100644 --- a/CRM/CiviMobileAPI/Upgrader.php +++ b/CRM/CiviMobileAPI/Upgrader.php @@ -153,6 +153,31 @@ class CRM_CiviMobileAPI_Upgrader extends CRM_CiviMobileAPI_Upgrader_Base { return TRUE; } + public function upgrade_0019() { + try { + (new CRM_CiviMobileAPI_Install_Entity_OptionGroup())->install(); + (new CRM_CiviMobileAPI_Install_Entity_OptionValue())->install(); + } catch (Exception $e) { + return FALSE; + } + + return TRUE; + } + + public function upgrade_0020() { + try { + (new CRM_CiviMobileAPI_Install_Entity_CustomGroup())->install(); + (new CRM_CiviMobileAPI_Install_Entity_CustomField())->install(); + (new CRM_CiviMobileAPI_Install_Entity_CustomGroup())->enableAll(); + + self::setDefaultMobileEventRegistration(); + } catch (Exception $e) { + return FALSE; + } + + return TRUE; + } + /** * Installs scheduled job * @@ -172,6 +197,8 @@ class CRM_CiviMobileAPI_Upgrader extends CRM_CiviMobileAPI_Upgrader_Base { && CRM_CiviMobileAPI_Utils_Calendar::isCiviCalendarCompatible() ); + self::setDefaultMobileEventRegistration(); + Civi::settings()->set('civimobile_auto_update', 1); } @@ -239,4 +266,19 @@ class CRM_CiviMobileAPI_Upgrader extends CRM_CiviMobileAPI_Upgrader_Base { } } + private static function setDefaultMobileEventRegistration() { + $isAllowMobileRegistrationField = "custom_" . CRM_CiviMobileAPI_Utils_CustomField::getId(CRM_CiviMobileAPI_Install_Entity_CustomGroup::ALLOW_MOBILE_REGISTRATION, CRM_CiviMobileAPI_Install_Entity_CustomField::IS_MOBILE_EVENT_REGISTRATION); + $events = civicrm_api3('Event', 'get', [ + 'sequential' => 1, + 'options' => ['limit' => 0] + ]); + + foreach ($events['values'] as $event) { + civicrm_api3('CustomValue', 'create', [ + 'entity_id' => $event['id'], + $isAllowMobileRegistrationField => 1 + ]); + } + } + } diff --git a/CRM/CiviMobileAPI/Utils/CiviCRM.php b/CRM/CiviMobileAPI/Utils/CiviCRM.php index 86384f63c267a38eb34ad31eae0f26a0799c8545..98cf52945302203ed07bd06984e9504fb8cf6228 100644 --- a/CRM/CiviMobileAPI/Utils/CiviCRM.php +++ b/CRM/CiviMobileAPI/Utils/CiviCRM.php @@ -30,8 +30,10 @@ class CRM_CiviMobileAPI_Utils_CiviCRM { /** * @return string */ - public static function getRenewalMembershipContributionPageUrl() { - $pageId = Civi::settings()->get('default_renewal_contribution_page'); + public static function getContributionPageUrl($pageId = NULL) { + if (empty($pageId)) { + $pageId = Civi::settings()->get('default_renewal_contribution_page'); + } if (!empty($pageId)) { $currentCMS = CRM_CiviMobileAPI_Utils_CmsUser::getInstance()->getSystem(); diff --git a/CRM/CiviMobileAPI/Utils/ContactsContributionStatistic.php b/CRM/CiviMobileAPI/Utils/ContactsContributionStatistic.php new file mode 100644 index 0000000000000000000000000000000000000000..dca6f69c34ba4370f512154dadd3df36cd820d74 --- /dev/null +++ b/CRM/CiviMobileAPI/Utils/ContactsContributionStatistic.php @@ -0,0 +1,229 @@ +getContributionSelectors($params); + $selector = $contributionSelectors['selector']; + $currentYearSelector = $contributionSelectors['current_year_selector']; + $preparedReceiveDate = (new CRM_CiviMobileAPI_Utils_ContributionChartBar())->getPrepareReceiveDate($params); + + $statistic = [ + 'all_time' => CRM_CiviMobileAPI_Utils_Contribution::transformStatistic($selector->getSummary()), + 'current_year' => CRM_CiviMobileAPI_Utils_Contribution::transformStatistic($currentYearSelector->getSummary()), + 'period' => (new CRM_CiviMobileAPI_Utils_ContributionChartBar())->findPeriod($preparedReceiveDate['start_date'], $preparedReceiveDate['end_date']) + ]; + + return $statistic; + } + + /** + * Get contribution statistic for selected contacts + * + * @param $params + * @param $listOfContactId + * @param $startDate + * @param $endDate + * @return array + */ + public function getSelectedContactsContributionStatistic($params, $listOfContactId) { + $contributionSelectors = $this->getContributionSelectors($params, $listOfContactId); + $selector = $contributionSelectors['selector']; + $currentYearSelector = $contributionSelectors['current_year_selector']; + $preparedReceiveDate = (new CRM_CiviMobileAPI_Utils_ContributionChartBar())->getPrepareReceiveDate($params); + + $statistic = [ + 'all_time' => CRM_CiviMobileAPI_Utils_Contribution::transformStatistic($selector->getSummary()), + 'current_year' => CRM_CiviMobileAPI_Utils_Contribution::transformStatistic($currentYearSelector->getSummary()), + 'chart_bar' => (new CRM_CiviMobileAPI_Utils_ContributionChartBar)->periodDivide($listOfContactId, $params), + 'period' => (new CRM_CiviMobileAPI_Utils_ContributionChartBar())->findPeriod($preparedReceiveDate['start_date'], $preparedReceiveDate['end_date']) + ]; + + return $statistic; + } + + /** + * Get contribution selectors + * + * @param $params + * @param null $listOfContactId + * @return CRM_Contribute_Selector_Search[] + */ + public function getContributionSelectors($params, $listOfContactId = NULL) { + $contributionFields = $this->getContributionFieldsParams($params); + + if (!empty($params['contact_id'])) { + $contactId = $params['contact_id']; + } else { + if (!empty($listOfContactId)) { + $contactId = ["IN" => $listOfContactId]; + } + else { + $contactId = ['IS NULL' => 1]; + } + } + $totalQueryParams = [ + 'contact_id' => $contactId, + 'receive_date' => $contributionFields['receive_date'], + 'financial_type_id' => $contributionFields['financial_type_id'], + 'payment_instrument_id' => $contributionFields['payment_instrument_id'], + 'contribution_status_id' => $contributionFields['contribution_status_id'], + 'total_amount' => $contributionFields['total_amount'], + ]; + + $currentYearQueryParams = [ + 'contact_id' => $contactId, + 'receive_date' => [ + 'BETWEEN' => [ + CRM_Utils_Date::getToday(['month'=> 1, 'day' => 1, 'year' => date("Y")], 'Y-m-d H:i:s'), + CRM_Utils_Date::getToday(['month'=> 1, 'day' => 1, 'year' => (date("Y") + 1)], 'Y-m-d H:i:s'), + ] + ], + 'financial_type_id' => $contributionFields['financial_type_id'], + 'payment_instrument_id' => $contributionFields['payment_instrument_id'], + 'contribution_status_id' => $contributionFields['contribution_status_id'], + 'total_amount' => $contributionFields['total_amount'], + ]; + + $selectedContactContributions = CRM_Contact_BAO_Query::convertFormValues($totalQueryParams); + $selectedContactCurrentYearContributions = CRM_Contact_BAO_Query::convertFormValues($currentYearQueryParams); + + $selector = new CRM_Contribute_Selector_Search($selectedContactContributions); + $currentYearSelector = new CRM_Contribute_Selector_Search($selectedContactCurrentYearContributions); + + return [ + 'selector' => $selector, + 'current_year_selector' => $currentYearSelector + ]; + } + + /** + * Get contribution fields params + * + * @param $params + * @return array + */ + public function getContributionFieldsParams($params) { + $receiveDate = !empty($params['receive_date']) ? $params['receive_date'] : NULL; + + $paymentInstrumentsId = !empty($params['payment_instrument_id']) ? $this->getPaymentInstrumentId($params['payment_instrument_id']['IN']) : NULL; + $paymentInstrumentsParam = !empty($paymentInstrumentsId) ? ['IN' => $paymentInstrumentsId] : NULL; + + $financialTypesId = !empty($params['financial_type_id']) ? $this->getFinancialTypeId($params['financial_type_id']['IN']) : NULL; + $financialTypesParam = !empty($financialTypesId) ? ['IN' => $financialTypesId] : NULL; + + $contributionStatusesId = !empty($params['contribution_status_id']) ? $this->getContributionStatusId($params['contribution_status_id']['IN']) : NULL; + $contributionStatusesParam = !empty($contributionStatusesId) ? ['IN' => $contributionStatusesId] : NULL; + + $totalAmountParam = !empty($params['total_amount']) ? $params['total_amount'] : NULL; + + return [ + 'receive_date' => $receiveDate, + 'payment_instrument_id' => $paymentInstrumentsParam, + 'financial_type_id' => $financialTypesParam, + 'contribution_status_id' => $contributionStatusesParam, + 'total_amount' => $totalAmountParam + ]; + } + + /** + * Get Ids of payment instruments + * + * @param $paymentInstrumentsParam + * @return array + */ + public function getPaymentInstrumentId($paymentInstrumentsParam) { + $paymentInstrumentsId = []; + + try { + $paymentInstruments = civicrm_api3('OptionValue', 'get', [ + 'sequential' => 1, + 'return' => ["name", "value"], + 'option_group_id' => "payment_instrument", + ])['values']; + } catch (CiviCRM_API3_Exception $e) { + return []; + } + + if (!empty($paymentInstruments)) { + foreach ($paymentInstruments as $paymentInstrument) { + foreach ($paymentInstrumentsParam as $paymentInstrumentParam) { + if ($paymentInstrumentParam == $paymentInstrument['name']) { + $paymentInstrumentsId[] = $paymentInstrument['value']; + } + } + } + } + + return $paymentInstrumentsId; + } + + /** + * Get Ids of financial types + * + * @param $financialTypesParam + * @return array + */ + public function getFinancialTypeId($financialTypesParam) { + $financialTypesId = []; + + try { + $financialTypes = civicrm_api3('FinancialType', 'get', [ + 'sequential' => 1, + ])['values']; + } catch (CiviCRM_API3_Exception $e) { + return []; + } + + if (!empty($financialTypes)) { + foreach ($financialTypes as $financialType) { + foreach ($financialTypesParam as $financialTypeParam) { + if ($financialTypeParam == $financialType['name']) { + $financialTypesId[] = $financialType['id']; + } + } + } + } + + return $financialTypesId; + } + + /** + * Get Ids of contribution statuses + * + * @param $contributionStatusesParam + * @return array + */ + public function getContributionStatusId($contributionStatusesParam) { + $contributionStatusId = []; + + try { + $contributionStatuses = civicrm_api3('OptionValue', 'get', [ + 'sequential' => 1, + 'return' => ["name", "value"], + 'option_group_id' => "contribution_status", + ])['values']; + } catch (CiviCRM_API3_Exception $e) { + return []; + } + + if (!empty($contributionStatuses)) { + foreach ($contributionStatuses as $contributionStatus) { + foreach ($contributionStatusesParam as $contributionStatusParam) { + if ($contributionStatusParam == $contributionStatus['name']) { + $contributionStatusId[] = $contributionStatus['value']; + } + } + } + } + + return $contributionStatusId; + } + +} diff --git a/CRM/CiviMobileAPI/Utils/ContributionChartBar.php b/CRM/CiviMobileAPI/Utils/ContributionChartBar.php new file mode 100644 index 0000000000000000000000000000000000000000..6ed1c5e406c6df2e9cf607a9335b7005f840231f --- /dev/null +++ b/CRM/CiviMobileAPI/Utils/ContributionChartBar.php @@ -0,0 +1,375 @@ +getPrepareReceiveDate($params); + $period = $this->findPeriod($preparedReceiveDate['start_date'], $preparedReceiveDate['end_date']); + + if ($period == 'days') { + return $this->dayPeriodDivide($listOfContactId, $params); + } + elseif ($period == 'weeks') { + return $this->weekPeriodDivide($listOfContactId, $params); + } + elseif ($period == 'months') { + return $this->monthPeriodDivide($listOfContactId, $params); + } + elseif ($period == 'years') { + return $this->yearPeriodDivide($listOfContactId, $params); + } + else { + return []; + } + } + + /** + * Get period for contribution statistic + * + * @param $startDate + * @param $endDate + * @return false|string + */ + public function findPeriod($startDate, $endDate) { + $startDate = date_create($startDate); + $endDate = date_create($endDate); + $interval = date_diff($startDate, $endDate); + + if ($interval->days <= 14) { + return 'days'; + } + elseif ($interval->days > 14 && $interval->days <= 60) { + return 'weeks'; + } + elseif ($interval->days > 60 && $interval->y == 0 ) { + return 'months'; + } + elseif ($interval->y != 0) { + return 'years'; + } + else + return FALSE; + } + + /** + * Get statistic by days + * + * @param $listOfContactId + * @param $params + * @return array + */ + public function dayPeriodDivide($listOfContactId, $params) { + $preparedReceiveDate = $this->getPrepareReceiveDate($params); + + $startDate = date_create($preparedReceiveDate['start_date']); + $endDate = date_create($preparedReceiveDate['end_date']); + $interval = date_diff($endDate,$startDate); + + $count = $interval->days; + + $firstDate = date_create($preparedReceiveDate['start_date']); + $secondDate = date_add($startDate, date_interval_create_from_date_string('1 days')); + $statistic = []; + + for ($i = 0; $i < $count; $i++) { + $firstDate = $firstDate->format('Y-m-d'); + $secondDate = $secondDate->format('Y-m-d'); + + $selector = $this->getContributeSelector($listOfContactId, $params, $firstDate, $secondDate); + + if ($i == ($count - 1)) { + $secondDate = $endDate->format('Y-m-d'); + } + + $statistic[] = $this->transformStatistic($selector->getSummary(), $firstDate, $secondDate); + + $firstDate = date_create($secondDate); + $secondDate = date_create($secondDate); + $secondDate = date_add($secondDate, date_interval_create_from_date_string('1 days')); + } + + return $statistic; + } + + /** + * Get statistic by weeks + * + * @param $listOfContactId + * @param $params + * @return array + */ + public function weekPeriodDivide($listOfContactId, $params) { + $preparedReceiveDate = $this->getPrepareReceiveDate($params); + + $date = date_create($preparedReceiveDate['start_date']); + $startDate = date_create($preparedReceiveDate['start_date']); + $endDate = date_create($preparedReceiveDate['end_date']); + $interval = date_diff($endDate,$startDate); + + $count = $interval->days; + $countOfWeeks = ceil($count / 7); + + $firstDate = date_create($preparedReceiveDate['start_date']); + $secondDate = date_add($startDate, date_interval_create_from_date_string('7 days')); + $displayedSecondDate = date_add($date, date_interval_create_from_date_string('6 days')); + $statistic = []; + + for ($i = 0; $i < $countOfWeeks; $i++) { + $firstDate = $firstDate->format('Y-m-d'); + $secondDate = $secondDate->format('Y-m-d'); + $displayedSecondDate = $displayedSecondDate->format('Y-m-d'); + + if ($i == ($countOfWeeks - 1)) { + $secondDate = $endDate->format('Y-m-d'); + $displayedSecondDate = $endDate->format('Y-m-d'); + } + + $selector = $this->getContributeSelector($listOfContactId, $params, $firstDate, $secondDate); + + $statistic[] = $this->transformStatistic($selector->getSummary(), $firstDate, $displayedSecondDate); + + $firstDate = date_create($secondDate); + $secondDate = date_create($secondDate); + $displayedSecondDate = date_create($displayedSecondDate); + $secondDate = date_add($secondDate, date_interval_create_from_date_string('7 days')); + $displayedSecondDate = date_add($displayedSecondDate, date_interval_create_from_date_string('7 days')); + } + return $statistic; + } + + /** + * Get statistic by months + * + * @param $listOfContactId + * @param $params + * @return array + */ + public function monthPeriodDivide($listOfContactId, $params) { + $preparedReceiveDate = $this->getPrepareReceiveDate($params); + + $startDate = date_create($preparedReceiveDate['start_date']); + $endDate = date_create($preparedReceiveDate['end_date']); + $interval = date_diff($endDate,$startDate); + + $countOfMonth = $interval->m; + $countOfDays = $interval->d; + + if (!empty($countOfDays)) { + $countOfMonth++; + } + + $firstDate = date_create($preparedReceiveDate['start_date']); + $secondDate = date_create(date("Y-m-t", strtotime($preparedReceiveDate['start_date']))); + $secondDate = date_add($secondDate, date_interval_create_from_date_string('1 days')); + + $statistic = []; + + for ($i = 0; $i < $countOfMonth; $i++) { + $firstDate = $firstDate->format('Y-m-d'); + $secondDate = $secondDate->format('Y-m-d'); + + if ($i == ($countOfMonth - 1)) { + $secondDate = $endDate->format('Y-m-d'); + } + + $selector = $this->getContributeSelector($listOfContactId, $params, $firstDate, $secondDate); + + $statistic[] = $this->transformStatistic($selector->getSummary(), $firstDate, $secondDate); + + $firstDate = date_create($secondDate); + $secondDate = date_create($secondDate); + $secondDate = date_add($secondDate, date_interval_create_from_date_string('1 month')); + } + + return $statistic; + } + + /** + * Get statistic by years + * + * @param $listOfContactId + * @param $params + * @return array + */ + public function yearPeriodDivide($listOfContactId, $params) { + $preparedReceiveDate = $this->getPrepareReceiveDate($params); + + $date = date_create($preparedReceiveDate['start_date']); + $startDate = date_create($preparedReceiveDate['start_date']); + $endDate = date_create($preparedReceiveDate['end_date']); + $interval = date_diff($endDate,$startDate); + + $countOfYears = $interval->y; + $countOfMonth = $interval->m; + $countOfDays = $interval->d; + + if (!empty($countOfMonth) || !empty($countOfDays)) { + $countOfYears++; + } + + $firstDate = date_create($preparedReceiveDate['start_date']); + + $beginningOfNextYear = date_add($date, date_interval_create_from_date_string('1 year')); + $beginningOfNextYear = $beginningOfNextYear->format('Y'); + $nextYear = date('Y-m-d', strtotime("first day of january $beginningOfNextYear ")); + $secondDate = date_create($nextYear); + $statistic = []; + + for ($i = 0; $i < $countOfYears; $i++) { + $firstDate = $firstDate->format('Y-m-d'); + $secondDate = $secondDate->format('Y-m-d'); + + if ($i == ($countOfYears - 1)) { + $secondDate = $endDate->format('Y-m-d'); + } + + $selector = $this->getContributeSelector($listOfContactId, $params, $firstDate, $secondDate); + + $statistic[] = $this->transformStatistic($selector->getSummary(), $firstDate, $secondDate); + + $firstDate = date_create($secondDate); + $secondDate = date_create($secondDate); + $secondDate = date_add($secondDate, date_interval_create_from_date_string('1 year')); + } + + return $statistic; + } + + /** + * Get contribute selector + * + * @param $listOfContactId + * @param $params + * @param $firstDate + * @param $secondDate + * @return CRM_Contribute_Selector_Search + */ + public function getContributeSelector($listOfContactId, $params, $firstDate, $secondDate) { + $contactQuery = ["IN" => $listOfContactId]; + $contributionFields = (new CRM_CiviMobileAPI_Utils_ContactsContributionStatistic)->getContributionFieldsParams($params); + + $totalQueryParams = [ + 'contact_id' => (!empty($listOfContactId)) ? $contactQuery : ['IS NULL' => 1], + 'receive_date' => [ + 'BETWEEN' => [ + $firstDate, + $secondDate, + ] + ], + 'financial_type_id' => $contributionFields['financial_type_id'], + 'payment_instrument_id' => $contributionFields['payment_instrument_id'], + 'contribution_status_id' => $contributionFields['contribution_status_id'], + 'total_amount' => $contributionFields['total_amount'], + ]; + + $selectedContributions = CRM_Contact_BAO_Query::convertFormValues($totalQueryParams); + $selector = new CRM_Contribute_Selector_Search($selectedContributions); + + return $selector; + } + + /** + * Return format statistic + * + * @param $statistic + * @param $firstDate + * @param $secondDate + * @return array + */ + public function transformStatistic($statistic, $firstDate, $secondDate) { + if (!empty($statistic['total'])) { + $statistic['total']['amount'] = static::transform($statistic['total']['amount']); + $statistic['total']['first_date'] = $firstDate; + $statistic['total']['second_date'] = $secondDate; + } + + if (!empty($statistic['cancel'])) { + $statistic['cancel']['amount'] = static::transform($statistic['cancel']['amount']); + } + + return [ + 'amount' => $statistic['total']['amount'], + 'first_date' => $statistic['total']['first_date'], + 'second_date' => $statistic['total']['second_date'] + ]; + } + + /** + * Explodes and trims string + * + * @param $string + * @return array + */ + private static function transform($string) { + if (!empty($string)) { + $string = str_replace("$", "", $string); + } + $result = []; + $exploded = explode(',', str_replace(" ", "", $string)); + foreach ($exploded as $item) { + $result[] = trim($item); + } + + return $result; + } + + /** + * Get minimal contribution date + * + * @return string + */ + public function getDefaultContributionStartDate() { + $select = 'SELECT MIN(civicrm_contribution.receive_date) as min_receive_date'; + $from = ' FROM civicrm_contribution'; + $sql = $select . $from; + + $receiveStartDate = ''; + try { + $dao = CRM_Core_DAO::executeQuery($sql); + while ($dao->fetch()) { + $receiveStartDate = $dao->min_receive_date; + } + } catch (Exception $e) { + return $receiveStartDate; + } + + return $receiveStartDate; + } + + /** + * Get prepare receive date + * + * @param $params + * @return array + */ + public function getPrepareReceiveDate($params) { + $defaultStartDate = (new CRM_CiviMobileAPI_Utils_ContributionChartBar)->getDefaultContributionStartDate(); + + if (!empty($params['receive_date']['BETWEEN']) || empty($params['receive_date'])) { + $startDate = !empty($params['receive_date']['BETWEEN'][0]) ? $params['receive_date']['BETWEEN'][0] : $defaultStartDate; + $endDate = !empty($params['receive_date']['BETWEEN'][1]) ? $params['receive_date']['BETWEEN'][1] : date('Y-m-d'); + } + elseif (!empty($params['receive_date']['<'])) { + $startDate = $defaultStartDate; + $endDate = $params['receive_date']['<']; + } + elseif (!empty($params['receive_date']['>'])) { + $startDate = $params['receive_date']['>']; + $endDate = date("Y-m-d", strtotime('tomorrow')); + } + + return [ + 'start_date' => $startDate, + 'end_date' => $endDate + ]; + } + +} diff --git a/CRM/CiviMobileAPI/Utils/ContributionFilter.php b/CRM/CiviMobileAPI/Utils/ContributionFilter.php new file mode 100644 index 0000000000000000000000000000000000000000..f89269e5b95194ad28c5317bc91d011af5f9ce45 --- /dev/null +++ b/CRM/CiviMobileAPI/Utils/ContributionFilter.php @@ -0,0 +1,189 @@ +getListOfContributionContactsId(); + $this->filterContactByNameOrTypes($params['contact_display_name'], $params['contact_type'], $listOfContributionContactsId); + $this->filterContactByTags($params['contact_tags']); + $this->filterContactByGroup($params['contact_groups']["IN"]); + + return $this->contactsId; + } + + /** + * Get contacts Id filter by tags + * + * @param $selectedContactTagsId + * @return array + */ + public function filterContactByTags($selectedContactTagsId) { + if (!empty($this->contactsId) && !empty($selectedContactTagsId)) { + $selectedTagNames = $this->getSelectedTagsNames($selectedContactTagsId); + + try { + $entityTags = civicrm_api3('EntityTag', 'get', [ + 'sequential' => 1, + 'entity_id' => ['IN' => $this->contactsId], + 'tag_id' => ['IN' => $selectedTagNames], + 'options' => ['limit' => 0], + ])['values']; + } catch (CiviCRM_API3_Exception $e) { + return []; + } + + $this->contactsId = []; + if (!empty($entityTags)) { + foreach ($entityTags as $entityTag) { + if (!in_array($entityTag['entity_id'], $this->contactsId)) { + $this->contactsId[] = $entityTag['entity_id']; + } + } + } + } + } + + /** + * Get tags names by tags Id + * + * @param $selectedTagsId + * @return array + */ + public function getSelectedTagsNames($selectedTagsId) { + $tagsNames = []; + + try { + $tagsName = civicrm_api3('Tag', 'get', [ + 'sequential' => 1, + 'return' => ["name"], + 'id' => $selectedTagsId, + ])['values']; + } catch (CiviCRM_API3_Exception $e) { + return []; + } + + if ($tagsName) { + foreach ($tagsName as $tagName) { + $tagsNames[] = $tagName['name']; + } + } + + return $tagsNames; + } + + /** + * Get contact's Id filter by display name or types + * + * @param $contactDisplayName + * @return array + */ + public function filterContactByNameOrTypes($contactDisplayName, $contactTypes, $listOfContributionContactsId) { + if ((!empty($contactDisplayName) || !empty($contactTypes)) && !empty($listOfContributionContactsId)) { + $contactDisplayNameParam = !empty($contactDisplayName) ? ['LIKE' => $contactDisplayName] : NULL; + $contactTypesParam = !empty($contactTypes) ? $contactTypes : NULL; + + try { + $contacts = civicrm_api3('Contact', 'get', [ + 'sequential' => 1, + 'display_name' => $contactDisplayNameParam, + 'contact_id' => ["IN" => $listOfContributionContactsId], + 'contact_type' => $contactTypesParam, + 'options' => ['limit' => 0], + 'return' => ["id"] + ])['values']; + } catch (CiviCRM_API3_Exception $e) { + return []; + } + + $this->contactsId = []; + if (!empty($contacts)) { + foreach ($contacts as $contact) { + $this->contactsId[] = $contact['id']; + } + } + } else { + $this->contactsId = $listOfContributionContactsId; + } + } + + /** + * Get contacts Id filtered by groups + * + * @param $selectedContactGroupsId + */ + public function filterContactByGroup($selectedContactGroupsId) { + if (!empty($this->contactsId) && !empty($selectedContactGroupsId)) { + $prepareContactId = implode(",", $this->contactsId); + $prepareSelectedGroupId = implode(",", $selectedContactGroupsId); + CRM_Contact_BAO_GroupContactCache::loadAll(); + + $select = "SELECT DISTINCT(`contact_id`)"; + $fromGroupContact = " FROM civicrm_group_contact"; + $fromGroupContactCache = " FROM civicrm_group_contact_cache"; + $where = " WHERE contact_id IN ( $prepareContactId ) "; + $and = " AND group_id IN ( $prepareSelectedGroupId ) "; + $sql = $select . $fromGroupContact . $where . $and . " UNION " . $select . $fromGroupContactCache . $where . $and; + + $contactGroupsRelationList = []; + try { + $dao = CRM_Core_DAO::executeQuery($sql); + while ($dao->fetch()) { + $contactGroupsRelationList[] = [ + 'contact_id' => $dao->contact_id + ]; + } + } catch (Exception $e) { + $contactGroupsRelationList = []; + } + + $this->contactsId = []; + + if (!empty($contactGroupsRelationList)) { + foreach ($contactGroupsRelationList as $contactGroupsRelation) { + $this->contactsId[] = (int)$contactGroupsRelation['contact_id']; + } + } + + } + } + + /** + * Get contribution contacts Id + * + * @return array + */ + public function getListOfContributionContactsId() { + $contributionTable = CRM_Contribute_DAO_Contribution::getTableName(); + $contactsId = []; + + try { + $contributionContactsId = CRM_Core_DAO::executeQuery("SELECT DISTINCT(contact_id) FROM $contributionTable")->fetchAll(); + } catch (Exception $e) { + return []; + } + + if (!empty($contributionContactsId)) { + foreach ($contributionContactsId as $contributionContactId) { + $contactsId[] = $contributionContactId['contact_id']; + } + } + + return $contactsId; + } +} diff --git a/CRM/CiviMobileAPI/Utils/Extension.php b/CRM/CiviMobileAPI/Utils/Extension.php index bf045b613359f75365140b6b38cb74a8cd9f9af8..ed33dd69dcd851b1e1b879ccde9835ebea8c1942 100644 --- a/CRM/CiviMobileAPI/Utils/Extension.php +++ b/CRM/CiviMobileAPI/Utils/Extension.php @@ -252,4 +252,31 @@ class CRM_CiviMobileAPI_Utils_Extension { $_COOKIE["civimobile_popup_close"] = true; } + /** + * Returns active tabs for CiviMobile applications + * + * @return array + */ + public static function getActiveCiviMobileTabs() { + $tabs = civicrm_api3('OptionValue', 'get', [ + 'sequential' => 1, + 'option_group_id' => CRM_CiviMobileAPI_Install_Entity_OptionGroup::TABS, + 'is_active' => 1, + 'options' => ['limit' => 0, 'sort' => "weight ASC"], + ])['values']; + + $preparedTabs = []; + + foreach ($tabs as $tab) { + $preparedTabs[] = [ + 'label' => $tab['label'], + 'name' => $tab['name'], + 'is_active' => $tab['is_active'], + 'weight' => $tab['weight'], + ]; + } + + return $preparedTabs; + } + } diff --git a/CRM/CiviMobileAPI/Utils/File.php b/CRM/CiviMobileAPI/Utils/File.php index b55d8d23e4fc7e847df499b933a4556e5dae8994..c51c9bff0cdf5e31c3bed6d75289300fe7fb1882 100644 --- a/CRM/CiviMobileAPI/Utils/File.php +++ b/CRM/CiviMobileAPI/Utils/File.php @@ -76,7 +76,7 @@ class CRM_CiviMobileAPI_Utils_File { foreach ($files as $file) { if ((!empty($file['fileName']) && $file['fileName'] == $filename) || (!empty($file['cleanName']) && $file['cleanName'] == $filename)) { - $url = CRM_Utils_System::url('civicrm/file', ['filename' => $filename, 'mime-type' => $file['mime_type']], TRUE); + $url = CRM_Utils_System::url('civicrm/file', ['filename' => $filename, 'mime-type' => $file['mime_type']], TRUE, NULL, FALSE); } } diff --git a/CRM/CiviMobileAPI/Utils/IsAllowMobileEventRegistrationField.php b/CRM/CiviMobileAPI/Utils/IsAllowMobileEventRegistrationField.php new file mode 100644 index 0000000000000000000000000000000000000000..289de7fa9b00a9bd1bd98eaa90754bc9159a26eb --- /dev/null +++ b/CRM/CiviMobileAPI/Utils/IsAllowMobileEventRegistrationField.php @@ -0,0 +1,55 @@ + $eventId, + 'return' => [$customFieldName] + ]); + } catch (CiviCRM_API3_Exception $e) { + $event = []; + } + + return (!empty($event[$customFieldName]) ? $event[$customFieldName] : NULL); + } + + /** + * Sets value from custom field + * + * @param $eventId + * @param $value + * @return bool + */ + public static function setValue($eventId, $value) { + $customFieldName = "custom_" . CRM_CiviMobileAPI_Utils_CustomField::getId( + CRM_CiviMobileAPI_Install_Entity_CustomGroup::ALLOW_MOBILE_REGISTRATION, + CRM_CiviMobileAPI_Install_Entity_CustomField::IS_MOBILE_EVENT_REGISTRATION + ); + + try { + civicrm_api3('Event', 'create', [ + 'id' => $eventId, + $customFieldName => $value + ]); + } catch (CiviCRM_API3_Exception $e) { + return false; + } + + return true; + } + +} diff --git a/CRM/CiviMobileAPI/Utils/ParticipantQrCode.php b/CRM/CiviMobileAPI/Utils/ParticipantQrCode.php index a8ddcce5fa667ca653a0e901a17edcfc3bd3618d..b54df614e206f0ec2c4be98b74cb236a92375d35 100644 --- a/CRM/CiviMobileAPI/Utils/ParticipantQrCode.php +++ b/CRM/CiviMobileAPI/Utils/ParticipantQrCode.php @@ -55,7 +55,7 @@ class CRM_CiviMobileAPI_Utils_ParticipantQrCode { if (!empty($participant)) { return [ - 'qr_code_image' => $participant[$customQrImage], + 'qr_code_image' => urldecode(html_entity_decode($participant[$customQrImage])), 'qr_code_hash' => $participant[$customQrCode], 'qr_event_id' => $participant[$customEventId] ]; diff --git a/CRM/CiviMobileAPI/Utils/Permission.php b/CRM/CiviMobileAPI/Utils/Permission.php index 09074e64f69397c2ecc47807aa8aba1e167a561d..dba61d0b61397696002c9763487aa71f9c11f38a 100644 --- a/CRM/CiviMobileAPI/Utils/Permission.php +++ b/CRM/CiviMobileAPI/Utils/Permission.php @@ -158,6 +158,8 @@ class CRM_CiviMobileAPI_Utils_Permission { $signPetition = CRM_Core_Permission::check('sign CiviCRM Petition'); $profileView = CRM_Core_Permission::check('profile view'); $accessAllCustomData = CRM_Core_Permission::check('access all custom data'); + $accessCiviContribute = CRM_Core_Permission::check('access CiviContribute'); + $makeOnlineContributions = CRM_Core_Permission::check('make online contributions'); } catch (Exception $e) { return []; } @@ -171,6 +173,7 @@ class CRM_CiviMobileAPI_Utils_Permission { 'view_agenda' => $viewAgenda ? 1 : 0, 'view_petition' => $signPetition && $profileView && $accessAllCustomData ? 1 : 0, 'sign_petition' => $signPetition && $profileCreate && $accessAllCustomData ? 1 : 0, + 'view_public_donation' => $accessCiviContribute && $makeOnlineContributions ? 1 : 0, ]; } diff --git a/api/v3/CiviMobileContributionStatistic.php b/api/v3/CiviMobileContributionStatistic.php index 8dcaaa3f9a199a6d2ba762b176c50d943aea6670..bc299226f3b325de422ef8a6eb9193c96fb4b83b 100644 --- a/api/v3/CiviMobileContributionStatistic.php +++ b/api/v3/CiviMobileContributionStatistic.php @@ -9,26 +9,23 @@ use CRM_CiviMobileAPI_ExtensionUtil as E; * @return array */ function civicrm_api3_civi_mobile_contribution_statistic_get($params) { - $queryParams = ['contact_id' => $params['contact_id']]; - $currentYearQueryParams = [ - 'contact_id' => $params['contact_id'], - 'receive_date' => [ - 'BETWEEN' => [ - CRM_Utils_Date::getToday(['month'=> 1, 'day' => 1, 'year' => date("Y")], 'Y-m-d H:i:s'), - CRM_Utils_Date::getToday(['month'=> 1, 'day' => 1, 'year' => (date("Y") + 1)], 'Y-m-d H:i:s'), - ] - ], - ]; + $listOfContactId = (new CRM_CiviMobileAPI_Utils_ContributionFilter)->getListOfContributionContactsId(); - $selector = new CRM_Contribute_Selector_Search(CRM_Contact_BAO_Query::convertFormValues($queryParams)); - $currentYearSelector = new CRM_Contribute_Selector_Search(CRM_Contact_BAO_Query::convertFormValues($currentYearQueryParams)); + if (!empty($params['contact_id'])) { + $statistic = (new CRM_CiviMobileAPI_Utils_ContactsContributionStatistic)->getSingleContactContributionStatistic($params); + } else { + if ($params['contact_display_name'] || $params['contact_type'] || $params['contact_tags'] || $params['contact_groups']) { + $listOfContactId = (new CRM_CiviMobileAPI_Utils_ContributionFilter)->filterContributionContacts($params); + } - $statistic = [ - 'all_time' => CRM_CiviMobileAPI_Utils_Contribution::transformStatistic($selector->getSummary()), - 'current_year' => CRM_CiviMobileAPI_Utils_Contribution::transformStatistic($currentYearSelector->getSummary()) - ]; + $statistic = (new CRM_CiviMobileAPI_Utils_ContactsContributionStatistic)->getSelectedContactsContributionStatistic($params, $listOfContactId); + } - return civicrm_api3_create_success([$params['contact_id'] => $statistic], $params); + if (!empty($params['contact_id'])) { + return civicrm_api3_create_success([$params['contact_id'] => $statistic], $params); + } else { + return civicrm_api3_create_success([$statistic], $params); + } } /** @@ -41,7 +38,7 @@ function _civicrm_api3_civi_mobile_contribution_statistic_get_spec(&$params) { $params['contact_id'] = [ 'title' => 'Contact ID', 'description' => E::ts('Contact ID'), - 'api.required' => 1, + 'api.required' => 0, 'type' => CRM_Utils_Type::T_INT, ]; } diff --git a/api/v3/CiviMobilePermission.php b/api/v3/CiviMobilePermission.php index 414ab664e604447721bc16e414160785d7170cb3..f770648efeea293ce5ebc5126075ab13d676bbc0 100644 --- a/api/v3/CiviMobilePermission.php +++ b/api/v3/CiviMobilePermission.php @@ -41,6 +41,9 @@ function civicrm_api3_civi_mobile_permission_get() { $profileCreate = CRM_Core_Permission::check('profile create'); $canCheckInOnEvent = CRM_Core_Permission::check(CRM_CiviMobileAPI_Utils_Permission::CAN_CHECK_IN_ON_EVENT); $viewAgenda = CRM_Core_Permission::check('view Agenda'); + $makeOnlineContributions = CRM_Core_Permission::check('make online contributions'); + $civimobileSeeGroups = CRM_Core_Permission::check('see groups'); + $civimobileSeeTags = CRM_Core_Permission::check('see tags'); $permissions['access'] = [ 'accessCiviCRM' => $accessToCiviCrm && $viewMyContact ? 1 : 0, @@ -197,6 +200,8 @@ function civicrm_api3_civi_mobile_permission_get() { 'all' => $accessToCiviCrm && $viewMyContact && $accessCiviContribute && $deleteInCiviContribute && ($viewAllContacts || $editAllContacts) ? 1 : 0, 'my' => $accessToCiviCrm && $viewMyContact && $accessCiviContribute && $deleteInCiviContribute ? 1 : 0, ], + 'make_contributions' => $accessToCiviCrm && $accessCiviContribute && $makeOnlineContributions ? 1 : 0, + 'contribution_dashboard' => CRM_Core_Permission::check('administer CiviCRM') ? 1 : 0, ]; $permissions['note'] = [ @@ -235,8 +240,8 @@ function civicrm_api3_civi_mobile_permission_get() { $permissions['group'] = [ 'view' => [ - 'all' => $accessToCiviCrm && $viewMyContact && ($viewAllContacts || $editAllContacts) ? 1 : 0, - 'my' => $accessToCiviCrm && $viewMyContact ? 1 : 0, + 'all' => $accessToCiviCrm && $viewMyContact && ($viewAllContacts || $editAllContacts) && $civimobileSeeGroups ? 1 : 0, + 'my' => $accessToCiviCrm && $viewMyContact && $civimobileSeeGroups ? 1 : 0, ], 'remove' => [ 'all' => $accessToCiviCrm && $viewMyContact && $editAllContacts ? 1 : 0, @@ -258,8 +263,8 @@ function civicrm_api3_civi_mobile_permission_get() { $permissions['tags'] = [ 'view' => [ - 'all' => $accessToCiviCrm && $viewMyContact && ($viewAllContacts || $editAllContacts) ? 1 : 0, - 'my' => $accessToCiviCrm && $viewMyContact ? 1 : 0, + 'all' => $accessToCiviCrm && $viewMyContact && ($viewAllContacts || $editAllContacts) && $civimobileSeeTags ? 1 : 0, + 'my' => $accessToCiviCrm && $viewMyContact && $civimobileSeeTags ? 1 : 0, ], 'add' => [ 'all' => $accessToCiviCrm && $viewMyContact && $editAllContacts ? 1 : 0, diff --git a/api/v3/CiviMobileSystem.php b/api/v3/CiviMobileSystem.php index 35f398c2d0f9fe29acbaecb8d3d04bc5ed3441c6..4d581d4b0a403f208b8776e7acd74d2db91a3715 100644 --- a/api/v3/CiviMobileSystem.php +++ b/api/v3/CiviMobileSystem.php @@ -18,7 +18,7 @@ function civicrm_api3_civi_mobile_system_get($params) { 'site_name' => CRM_CiviMobileAPI_Utils_Extension::getSiteName(), 'is_showed_news' => CRM_CiviMobileAPI_Utils_Extension::isShowedNews(), 'news_rss_feed_url' => CRM_CiviMobileAPI_Utils_Extension::newsRssFeedUrl(), - 'renewal_membership_contribution_page_url' => CRM_CiviMobileAPI_Utils_CiviCRM::getRenewalMembershipContributionPageUrl(), + 'renewal_membership_contribution_page_url' => CRM_CiviMobileAPI_Utils_CiviCRM::getContributionPageUrl(), 'time_zone_utc_offset' => CRM_CiviMobileAPI_Utils_Cms::getTimeZoneUTCOffset(), ]; diff --git a/api/v3/MyEvent.php b/api/v3/MyEvent.php index 5c4ebbaaeaf705c50ebe1cbdf27118454084bfb6..cd90793231274a984e1e7582093b844d71a0ba5a 100644 --- a/api/v3/MyEvent.php +++ b/api/v3/MyEvent.php @@ -10,8 +10,6 @@ * @throws \Civi\API\Exception\UnauthorizedException */ function civicrm_api3_my_event_get($params) { - _civicrm_api3_my_event_check_permission($params); - $params = _civicrm_api3_my_event_prepare_params($params); $dao = _civicrm_api3_my_event_get_find($params); @@ -54,22 +52,6 @@ function _civicrm_api3_my_event_prepare_params($params) { return $newParams; } -/** - * Checks permissions - * - * @param $params - * - * @throws \Civi\API\Exception\UnauthorizedException - */ -function _civicrm_api3_my_event_check_permission($params) { - $contactID = CRM_Utils_Array::value('contact_id', $params); - if (!CRM_Core_Permission::check('administer CiviCRM')) { - if (CRM_Core_Session::singleton()->get('userID') != $contactID) { - throw new \Civi\API\Exception\UnauthorizedException('Permission denied to see contact\'s events'); - } - } -} - /** * Finds Events by params * @@ -206,4 +188,4 @@ function _civicrm_api3_my_event_get_spec(&$params) { 'description' => "End Date", 'type' => CRM_Utils_Type::T_DATE, ]; -} \ No newline at end of file +} diff --git a/civimobileapi.php b/civimobileapi.php index 24e57775ce5eab39efccbf4af8ea6b0c653759a6..1aee54c2ab77c5996d4b9ded7e0caa8b47b3222f 100644 --- a/civimobileapi.php +++ b/civimobileapi.php @@ -202,6 +202,11 @@ function civimobileapi_civicrm_apiWrappers(&$wrappers, $apiRequest) { $wrappers[] = new CRM_CiviMobileAPI_ApiWrapper_Survey_Getsingle(); } } + elseif ($apiRequest['entity'] == 'ContributionPage') { + if ($apiRequest['action'] == 'get') { + $wrappers[] = new CRM_CiviMobileAPI_ApiWrapper_ContributionPage(); + } + } } /** @@ -254,7 +259,9 @@ function civimobileapi_civicrm_alterAPIPermissions($entity, $action, &$params, & ($entity == 'civi_mobile_survey' and $action == 'sign') || ($entity == 'civi_mobile_survey' and $action == 'get_signed_values') || ($entity == 'civi_mobile_survey_interviewer' and $action == 'get') || - ($entity == 'civi_mobile_contact_group' and $action == 'delete') + ($entity == 'civi_mobile_contact_group' and $action == 'delete') || + ($entity == 'contribution_page' and $action == 'get') || + ($entity == 'financial_type' and $action == 'get') ) { $params['check_permissions'] = FALSE; } @@ -390,6 +397,8 @@ function civimobileapi_civicrm_post($op, $objectName, $objectId, &$objectRef) { $qrcodeCheckinEvent = CRM_Utils_Request::retrieve('default_qrcode_checkin_event', 'String'); $eventId = $objectId; + CRM_CiviMobileAPI_Utils_IsAllowMobileEventRegistrationField::setValue($eventId, 1); + if ($qrcodeCheckinEvent) { CRM_CiviMobileAPI_Utils_EventQrCode::setQrCodeToEvent($eventId); } @@ -422,6 +431,14 @@ function civimobileapi_civicrm_post($op, $objectName, $objectId, &$objectRef) { } function civimobileapi_civicrm_postProcess($formName, &$form) { + if ($formName == 'CRM_Event_Form_ManageEvent_Registration' && ($form->getAction() == CRM_Core_Action::UPDATE || $form->getAction() == CRM_Core_Action::ADD)) { + $values = $form->exportValues(); + + $newValue = isset($values['civi_mobile_is_event_mobile_registration']) ? 1 : 0; + $eventId = $form->_id; + CRM_CiviMobileAPI_Utils_IsAllowMobileEventRegistrationField::setValue($eventId, $newValue); + } + //TODO: think about how to remove all venues on hook_pre /** * Removes all venues in EventSession if loc_block_id was changed. @@ -547,6 +564,17 @@ function civimobileapi_civicrm_permission(&$permissionList) { $permissionsPrefix . 'view Agenda', E::ts("View Agenda."), ]; + + $permissionList['see tags'] = [ + $permissionsPrefix . 'see tags', + E::ts("It means the User can see the tags he belongs to."), + ]; + + $permissionList['see groups'] = [ + $permissionsPrefix . 'see groups', + E::ts("It means the User can see the groups he belongs to"), + ]; + } if (!function_exists('is_writable_r')) { @@ -633,6 +661,15 @@ function civimobileapi_civicrm_navigationMenu(&$menu) { 'separator' => NULL, ]; _civimobileapi_civix_insert_navigation_menu($menu, 'Administer/CiviMobile/', $civiMobileSettings); + + $civiMobileTabs = [ + 'name' => E::ts('CiviMobile Tabs'), + 'url' => 'civicrm/admin/options/civi_mobile_tabs', + 'permission' => 'administer CiviCRM', + 'operator' => NULL, + 'separator' => NULL, + ]; + _civimobileapi_civix_insert_navigation_menu($menu, 'Administer/CiviMobile/', $civiMobileTabs); } /** @@ -641,16 +678,41 @@ function civimobileapi_civicrm_navigationMenu(&$menu) { * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_buildForm/ */ function civimobileapi_civicrm_buildForm($formName, &$form) { - if ($formName == 'CRM_Event_Form_ManageEvent_EventInfo' && $form->getAction() == CRM_Core_Action::ADD) { - $templatePath = realpath(dirname(__FILE__)."/templates"); + if ($formName == 'CRM_Event_Form_ManageEvent_Registration' && $form->getAction() == CRM_Core_Action::UPDATE) { + $form->addElement('checkbox', + 'civi_mobile_is_event_mobile_registration', + ts('Is allow mobile registration?') + ); + + if ($form->getAction() == CRM_Core_Action::UPDATE) { + $eventId = $form->_id; + $elementValue = CRM_CiviMobileAPI_Utils_IsAllowMobileEventRegistrationField::getValue($eventId); + $form->setDefaults([ + 'civi_mobile_is_event_mobile_registration' => $elementValue, + ]); + } - $form->add('checkbox', 'default_qrcode_checkin_event', E::ts('When generating QR Code tokens, use this Event')); - CRM_Core_Region::instance('page-body')->add([ - 'template' => "{$templatePath}/qrcode-checkin-event-options.tpl" + CRM_Core_Region::instance('page-header')->add([ + 'template' => CRM_CiviMobileAPI_ExtensionUtil::path() . '/templates/CRM/CiviMobileAPI/Block/IsAllowMobileRegistration.tpl' ]); + } + + if ($formName == 'CRM_Event_Form_ManageEvent_EventInfo') { + if ($form->getAction() == CRM_Core_Action::ADD){ + $templatePath = realpath(dirname(__FILE__)."/templates"); + + $form->add('checkbox', 'default_qrcode_checkin_event', E::ts('When generating QR Code tokens, use this Event')); + CRM_Core_Region::instance('page-body')->add([ + 'template' => "{$templatePath}/qrcode-checkin-event-options.tpl" + ]); + + CRM_Core_Region::instance('page-body')->add([ + 'style' => '.custom-group-' . CRM_CiviMobileAPI_Install_Entity_CustomGroup::QR_USES . ' { display:none;}' + ]); + } CRM_Core_Region::instance('page-body')->add([ - 'style' => '.custom-group-' . CRM_CiviMobileAPI_Install_Entity_CustomGroup::QR_USES . ' { display:none;}' + 'style' => '.custom-group-' . CRM_CiviMobileAPI_Install_Entity_CustomGroup::ALLOW_MOBILE_REGISTRATION . ' { display:none;}' ]); } diff --git a/info.xml b/info.xml index 460a3223dcfbd600c49f939df972c60632fbaa2e..a3346dc5588e5568ea15d735b4b1a89db24eb6ed 100644 --- a/info.xml +++ b/info.xml @@ -14,8 +14,8 @@ https://civimobile.org http://www.gnu.org/licenses/agpl-3.0.html - 2021-05-21 - 5.6.1 + 2021-08-12 + 5.7 4.7 5.20 diff --git a/templates/CRM/CiviMobileAPI/Block/IsAllowMobileRegistration.tpl b/templates/CRM/CiviMobileAPI/Block/IsAllowMobileRegistration.tpl new file mode 100644 index 0000000000000000000000000000000000000000..273a93172f77a808d539619299ba2ecec2db0285 --- /dev/null +++ b/templates/CRM/CiviMobileAPI/Block/IsAllowMobileRegistration.tpl @@ -0,0 +1,25 @@ + + + {ts}Mobile registration{/ts} + + + + {$form.civi_mobile_is_event_mobile_registration.html} {$form.civi_mobile_is_event_mobile_registration.label} + + + + + +{literal} + +{/literal} diff --git a/templates/CRM/CiviMobileAPI/CustomizeContributionPayment.tpl b/templates/CRM/CiviMobileAPI/CustomizeContributionPayment.tpl index 64f2007100e27cbb6ebe1f16382b2fdf6cb2afa2..15ceb6b2a7616906f13991a47dbdd00b9567c6b6 100644 --- a/templates/CRM/CiviMobileAPI/CustomizeContributionPayment.tpl +++ b/templates/CRM/CiviMobileAPI/CustomizeContributionPayment.tpl @@ -12,14 +12,15 @@ cj("head").append(''); cj("head").append(''); - $(window).bind("load", function() { + setTimeout(function(){ $('#content').siblings().hide(); $('#content').parents().siblings().hide(); $('.crm-public-footer').hide(); $('.crm-section.crm-socialnetwork.help').hide(); $('#printer-friendly').hide(); - }); + $('#civicrm-menu-nav').hide(); + }, 500); //wordpress header $('#site-header').hide(); $('.menu-modal').hide(); @@ -196,4 +197,4 @@ display: none; } -{/literal} +{/literal} \ No newline at end of file diff --git a/templates/CRM/CiviMobileAPI/Form/Settings.tpl b/templates/CRM/CiviMobileAPI/Form/Settings.tpl index 6fa7cdeaa310b6c3c1e6c23a8185f86338485a76..5a612e89ed390c0f81ca65be0cd180986aae2421 100644 --- a/templates/CRM/CiviMobileAPI/Form/Settings.tpl +++ b/templates/CRM/CiviMobileAPI/Form/Settings.tpl @@ -344,6 +344,10 @@ shownItems.push("Petitions*"); $(".spec-event-note").show(); } + if (possibleItemsToDisplayInPublicArea.indexOf('Donations') !== -1) { + shownItems.push("Donations*"); + $(".spec-event-note").show(); + } } if (shownItems.length === 0) {