diff --git a/.forceignore b/.forceignore index 02b2d9c2328..860395bcb93 100644 --- a/.forceignore +++ b/.forceignore @@ -4,4 +4,7 @@ # LWC Jest **/__tests__/** -**/__mocks__/** \ No newline at end of file +**/__mocks__/** +**/tsconfig.json + +**/*.ts diff --git a/.github/ISSUE_TEMPLATE/read-this-for-all-support-and-questions.md b/.github/ISSUE_TEMPLATE/read-this-for-all-support-and-questions.md new file mode 100644 index 00000000000..86f7cb91d71 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/read-this-for-all-support-and-questions.md @@ -0,0 +1,15 @@ +--- +name: READ THIS FOR ALL SUPPORT AND QUESTIONS +about: 'GO HERE: http://sfdc.co/npchub' +title: '' +labels: invalid +assignees: '' + +--- + +==== IMPORTANT NOTES ==== + +The Nonprofit Success Pack team does not review or respond to support requests or questions posted in this repository. + +Instead, please post all questions and issues directly in the Nonprofit Hub of the Trailblazer Community: http://sfdc.co/npchub +======================================================================== diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index e88c5f25f5c..b6b177f20b3 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -8,8 +8,6 @@ # Features Intended for Future Release -# Features for Elevate Customers - # New Metadata # Deleted Metadata diff --git a/.github/workflows/jest.yml b/.github/workflows/jest.yml index 48cd7d422d5..2b15ea9cceb 100644 --- a/.github/workflows/jest.yml +++ b/.github/workflows/jest.yml @@ -4,15 +4,15 @@ jobs: jest: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - uses: actions/setup-node@v2-beta + - uses: actions/checkout@v5 + - uses: actions/setup-node@v4 with: - node-version: '14' + node-version: '20' - name: Determine Node Version id: node-version run: | echo "::set-output name=ver::$(node --version)" - - uses: actions/cache@v2 + - uses: actions/cache@v4 with: path: node_modules key: ${{ runner.os }}-${{ steps.node-version.outputs.ver }}-${{ hashFiles('package.json', 'yarn.lock') }} diff --git a/.github/workflows/sa11y-jest.yml b/.github/workflows/sa11y-jest.yml deleted file mode 100644 index 61a6fb0a192..00000000000 --- a/.github/workflows/sa11y-jest.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Sa11y -on: [push] -jobs: - sa11y-jest: - env: - SA11Y_AUTO: 1 - SA11Y_CLEANUP: 1 - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - uses: actions/setup-node@v2-beta - with: - node-version: '14' - - name: Determine Node Version - id: node-version - run: | - echo "::set-output name=ver::$(node --version)" - - uses: actions/cache@v2 - with: - path: node_modules - key: ${{ runner.os }}-${{ steps.node-version.outputs.ver }}-${{ hashFiles('package.json', 'yarn.lock') }} - - name: Install Packages - run: | - yarn install - - name: Run Jest Tests - run: | - npx lwc-jest --skipApiVersionCheck diff --git a/.gitignore b/.gitignore index 67cc6f63379..56d032e1675 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ Referenced Packages *.sublime-project *.sublime-workspace **/.sfdx/ +**/.sf/ **/.vscode/ **/.idea/ **/.mypy_cache/ @@ -42,7 +43,8 @@ robot/Cumulus/results/ datasets/dev_org/test_data.db *.db .cci - +.sfdx +.sf # LWC force-app/main/default/lwc/.eslintrc.json /node_modules diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 00000000000..ce7a494556d --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1,2 @@ +# Comment line immediately above ownership line is reserved for related other information. Please be careful while editing. +#ECCN:Open Source diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000000..b4612a7bc59 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,105 @@ +# Salesforce Open Source Community Code of Conduct + +## About the Code of Conduct + +Equality is a core value at Salesforce. We believe a diverse and inclusive +community fosters innovation and creativity, and are committed to building a +culture where everyone feels included. + +Salesforce open-source projects are committed to providing a friendly, safe, and +welcoming environment for all, regardless of gender identity and expression, +sexual orientation, disability, physical appearance, body size, ethnicity, nationality, +race, age, religion, level of experience, education, socioeconomic status, or +other similar personal characteristics. + +The goal of this code of conduct is to specify a baseline standard of behavior so +that people with different social values and communication styles can work +together effectively, productively, and respectfully in our open source community. +It also establishes a mechanism for reporting issues and resolving conflicts. + +All questions and reports of abusive, harassing, or otherwise unacceptable behavior +in a Salesforce open-source project may be reported by contacting the Salesforce +Open Source Conduct Committee at ossconduct@salesforce.com. + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of gender +identity and expression, sexual orientation, disability, physical appearance, +body size, ethnicity, nationality, race, age, religion, level of experience, education, +socioeconomic status, or other similar personal characteristics. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy toward other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Personal attacks, insulting/derogatory comments, or trolling +* Public or private harassment +* Publishing, or threatening to publish, others' private information—such as +a physical or electronic address—without explicit permission +* Other conduct which could reasonably be considered inappropriate in a +professional setting +* Advocating for or encouraging any of the above behaviors + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned with this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project email +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the Salesforce Open Source Conduct Committee +at ossconduct@salesforce.com. All complaints will be reviewed and investigated +and will result in a response that is deemed necessary and appropriate to the +circumstances. The committee is obligated to maintain confidentiality with +regard to the reporter of an incident. Further details of specific enforcement +policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership and the Salesforce Open Source Conduct +Committee. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][contributor-covenant-home], +version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html. +It includes adaptions and additions from [Go Community Code of Conduct][golang-coc], +[CNCF Code of Conduct][cncf-coc], and [Microsoft Open Source Code of Conduct][microsoft-coc]. + +This Code of Conduct is licensed under the [Creative Commons Attribution 3.0 License][cc-by-3-us]. + +[contributor-covenant-home]: https://www.contributor-covenant.org (https://www.contributor-covenant.org/) +[golang-coc]: https://golang.org/conduct +[cncf-coc]: https://github.com/cncf/foundation/blob/master/code-of-conduct.md +[microsoft-coc]: https://opensource.microsoft.com/codeofconduct/ +[cc-by-3-us]: https://creativecommons.org/licenses/by/3.0/us/ \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000000..a37b5918f02 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,21 @@ +# Contributing Guide For NPSP + +This page lists the operational governance model of this project, as well as the recommendations and requirements for how to best contribute to NPSP. We strive to obey these as best as possible. As always, thanks for contributing – we hope these guidelines make it easier and shed some light on our approach and processes. + +# Governance Model + +## Salesforce Sponsored + +The intent and goal of open sourcing this project is to increase the contributor and user base. However, only Salesforce employees will be given `admin` rights and will be the final arbitrars of what contributions are accepted or not. + +# Issues, requests & ideas + +The Nonprofit Success Pack team does not review or respond to support requests or questions posted in this repository. + +Instead, please post all questions and issues directly in the Nonprofit Hub of the Trailblazer Community: http://sfdc.co/npchub + +# Code of Conduct +Please follow our [Code of Conduct](CODE_OF_CONDUCT.md). + +# License +By contributing your code, you agree to license your contribution under the terms of our project [LICENSE](LICENSE) and to sign the [Salesforce CLA](https://cla.salesforce.com/sign-cla) diff --git a/README.md b/README.md index 3d1b52e3ca5..cfaf31d2434 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,36 @@ ![Salesforce Nonprofit Success Pack](https://cloud.githubusercontent.com/assets/450473/18836784/15e1774a-83c7-11e6-8434-0521d4fbebc0.png "Salesforce Nonprofit Success Pack") -#### For Users +## Important Note -* Ask questions or get help -* Log a confirmed Issue or Feature Request -* User Documentation -* Check out existing bugs and feature and enhancement requests. -* Release Notes and Beta Releases +In 2023, Salesforce launched the Nonprofit Cloud which is at the foundation of Salesforce for Nonprofits. Nonprofit Cloud helps teams unify their data to work beyond silos and better collaborate, share, learn from, and use their data. Use Nonprofit Cloud as your a single solution to begin or continue in your digital transformation journey. Read more about the [new Nonprofit Cloud](https://www.salesforce.com/blog/new-nonprofit-cloud/). Some key highlights: + +* Salesforce will to continue support our managed package products, including the Nonprofit Success Pack. Tens of thousands of customers use our current managed package products to achieve great results. +* Many of our ISV partners are building fantastic solutions for our managed packages as well as the new Nonprofit Cloud. We’re working with these partners to ensure that they understand our new product architecture, and are able to bring their years of experience and learnings to the new Nonprofit Cloud. +* Salesforce remains deeply committed to nonprofit pricing. There are many new capabilities within the new Nonprofit Cloud and we work hard to maintain our nonprofit discounts across the new products. Our goals are to simplify access to nonprofit technology and make it easier for customers to get started. +* Salesforce continues to grant free licenses with the Power of Us Program for the managed packages and Nonprofit Cloud. With Nonprofit Cloud, the Power of Us program also includes more features than ever to accelerate and deepen the nonprofit experience. +* Take the new product for a test drive. Sign-up for a [Nonprofit Cloud Trial org](https://help.salesforce.com/s/articleView?id=sfdo.NPC_Create_Nonprofit_Cloud_Trial_Org.htm&type=5). +* Visit the [Nonprofit Hub](https://trailhead.salesforce.com/trailblazer-community/groups/0F9300000001ocxCAA?tab=discussion&sort=LAST_MODIFIED_DATE_DESC) to chat with others about how nonprofits use Salesforce for social good. + +--- +### For Nonprofit Success Pack Users and admins + +* Check out existing [Nonprofit feature and enhancement requests](https://ideas.salesforce.com/s/search#t=All&sort=relevancy&f:@sfcategoryfull=[Nonprofit%7CNonprofit%20Cloud,Nonprofit%7CNonprofit%20Success%20Pack%20(NPSP)%20-%20Managed%20Package]). +* [Ask questions or get help with the Nonprofit Success Pack](https://trailhead.salesforce.com/trailblazer-community/groups/0F94S000000kHitSAE) +* [Ask for support or questions with other Nonprofit Users and Partners](https://trailhead.salesforce.com/trailblazer-community/groups/0F9300000001ocxCAA) +* [Nonprofit Success Pack (NPSP) Documentation](https://help.salesforce.com/s/articleView?id=sfdo.Nonprofit_Success_Pack.htm) +* [Release Notes](https://sfdc.co/bnL4Cb) +* [Known Issues](https://issues.salesforce.com/#f[sfcategoryfull]=Nonprofit%7CNonprofit%20Success%20Pack%20(NPSP)%20-%20Managed%20Package) + +### Try out the Nonprofit Success Pack -#### Try it out You can install NPSP utilizing our custom application installer into any Developer Edition, Sandbox or Enterprise Edition Salesforce org. -* NPSP Installer -#### Meta +* [NPSP Installer](https://install.salesforce.org/products/npsp) + +### Try out the New Nonprofit Cloud + +* [Nonprofit Cloud Learning Org Signup](https://help.salesforce.com/s/articleView?id=sfdo.NPC_Create_Nonprofit_Cloud_Trial_Org.htm&type=5) -The Nonprofit Success Pack (“NPSP”) is an open-source package licensed by Salesforce.org (“SFDO”) under the BSD-3 Clause License, found at https://opensource.org/licenses/BSD-3-Clause. ANY MASTER SUBSCRIPTION AGREEMENT YOU OR YOUR ENTITY MAY HAVE WITH SFDO DOES NOT APPLY TO YOUR USE OF NPSP. NPSP IS PROVIDED “AS IS” AND AS AVAILABLE, AND SFDO MAKES NO WARRANTY OF ANY KIND REGARDING NPSP, WHETHER EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, FREEDOM FROM DEFECTS OR NON-INFRINGEMENT, TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW. -SFDO WILL HAVE NO LIABILITY ARISING OUT OF OR RELATED TO YOUR USE OF NPSP FOR ANY DIRECT DAMAGES OR FOR ANY LOST PROFITS, REVENUES, GOODWILL OR INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL, EXEMPLARY, COVER, BUSINESS INTERRUPTION OR PUNITIVE DAMAGES, WHETHER AN ACTION IS IN CONTRACT OR TORT AND REGARDLESS OF THE THEORY OF LIABILITY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES OR IF A REMEDY OTHERWISE FAILS OF ITS ESSENTIAL PURPOSE. THE FOREGOING DISCLAIMER WILL NOT APPLY TO THE EXTENT PROHIBITED BY LAW. SFDO DISCLAIMS ALL LIABILITY AND INDEMNIFICATION OBLIGATIONS FOR ANY HARM OR DAMAGES CAUSED BY ANY THIRD-PARTY HOSTING PROVIDERS. +### Meta -_ducking-octo-happiness, laughing-archer_ +The Nonprofit Success Pack (“NPSP”) is an open-source package licensed by Salesforce.org (“SFDO”) under the BSD-3 Clause License, found at https://opensource.org/licenses/BSD-3-Clause. ANY MASTER SUBSCRIPTION AGREEMENT YOU OR YOUR ENTITY MAY HAVE WITH SFDO DOES NOT APPLY TO YOUR USE OF NPSP. NPSP IS PROVIDED “AS IS” AND AS AVAILABLE, AND SFDO MAKES NO WARRANTY OF ANY KIND REGARDING NPSP, WHETHER EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, FREEDOM FROM DEFECTS OR NON-INFRINGEMENT, TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW. SFDO WILL HAVE NO LIABILITY ARISING OUT OF OR RELATED TO YOUR USE OF NPSP FOR ANY DIRECT DAMAGES OR FOR ANY LOST PROFITS, REVENUES, GOODWILL OR INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL, EXEMPLARY, COVER, BUSINESS INTERRUPTION OR PUNITIVE DAMAGES, WHETHER AN ACTION IS IN CONTRACT OR TORT AND REGARDLESS OF THE THEORY OF LIABILITY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES OR IF A REMEDY OTHERWISE FAILS OF ITS ESSENTIAL PURPOSE. THE FOREGOING DISCLAIMER WILL NOT APPLY TO THE EXTENT PROHIBITED BY LAW. SFDO DISCLAIMS ALL LIABILITY AND INDEMNIFICATION OBLIGATIONS FOR ANY HARM OR DAMAGES CAUSED BY ANY THIRD-PARTY HOSTING PROVIDERS. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000000..e31774df287 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,7 @@ +## Security + +Please report any security issue to [security@salesforce.com](mailto:security@salesforce.com) +as soon as it is discovered. This library limits its runtime dependencies in +order to reduce the total cost of ownership as much as can be, but all consumers +should remain vigilant and have their security stakeholders review all third-party +products (3PP) like this one and their dependencies. \ No newline at end of file diff --git a/StaticResourceSources/npsp-slds/npsp-common.css b/StaticResourceSources/npsp-slds/npsp-common.css index 7d781f4f9ec..34e695ff644 100644 --- a/StaticResourceSources/npsp-slds/npsp-common.css +++ b/StaticResourceSources/npsp-slds/npsp-common.css @@ -17,6 +17,7 @@ input.lookupInput { input.lookupInputSLDS { width: 100%; margin-right: -30px !important; + border-color: #747474 !important; } body .dateInput input[type="text"], .slds-vf-scope .dateInput input[type="text"] { margin-left: 0; diff --git a/cumulusci.yml b/cumulusci.yml index 971e3ebc175..2f7b3d2925f 100644 --- a/cumulusci.yml +++ b/cumulusci.yml @@ -1,4 +1,4 @@ -minimum_cumulusci_version: 3.23.0 +minimum_cumulusci_version: 3.74.0 project: name: Cumulus source_format: sfdx @@ -221,13 +221,18 @@ tasks: options: update_future_releases: True + github_release: + options: + release_content: | + Check out the [Salesforce Release Notes](https://sfdc.co/bnL4Cb) or [Known Issues](https://issues.salesforce.com/) for details. + github_release_notes: options: trial_info: "`TBD`" is_rd2_enabled: description: This preflight check ensures that Enhanced Recurring Donations is enabled - class_path: tasks.is_rd2_enabled + class_path: tasks.check_rd2_enablement.is_rd2_enabled group: NPSP robot: @@ -769,6 +774,12 @@ tasks: - "*.cls" flows: + + release_production: + steps: + 3: + task: None + build_unlocked_test_package: steps: 0: diff --git a/force-app/main/adapter/in/sobjects/contact/ContactAdapter.cls b/force-app/main/adapter/in/sobjects/contact/ContactAdapter.cls index 7309d27d0b7..afe554f10c6 100644 --- a/force-app/main/adapter/in/sobjects/contact/ContactAdapter.cls +++ b/force-app/main/adapter/in/sobjects/contact/ContactAdapter.cls @@ -593,6 +593,13 @@ public inherited sharing class ContactAdapter extends fflib_SObjects2 { Address__c contactAddress = contactAddressesToInsertByContact.get(contact); contact.Current_Address__c = contactAddress.Id; } + + SfdoInstrumentationService.getInstance().log( + SfdoInstrumentationEnum.Feature.Addresses, + SfdoInstrumentationEnum.Component.TriggerAction, + SfdoInstrumentationEnum.Action.Dml_Insert, + new Map{ 'SourceClass' => 'ContactAdapter' }, + contactAddressesToInsertByContact.size()); } private void updateContactAddressFromExistingAddress(Contact contact, Address__c existingAddressFromContact) { @@ -651,7 +658,7 @@ public inherited sharing class ContactAdapter extends fflib_SObjects2 { // mark the new address as default // put it on dmlWrapper // - + // Map to hold the contact-to-address mapping Map contactAddressesByContact = getContactAddressesByContact(contacts); // look for duplicates for our proposed new addresses @@ -665,7 +672,7 @@ public inherited sharing class ContactAdapter extends fflib_SObjects2 { Address__c newAddressFromContact = contactAddressesByContact.get(contact); Address__c existingAddressFromContact = existingAddressesByAddress.get(newAddressFromContact); - // if found a match + if (contactAddressHasAddressMatch(existingAddressFromContact)) { updateContactAddressFromExistingAddress(contact, existingAddressFromContact); @@ -679,7 +686,7 @@ public inherited sharing class ContactAdapter extends fflib_SObjects2 { contactAddressesToInsertByContact.put(contact, newAddressFromContact); } } - + insertContactAddresses(contactAddressesToInsertByContact); } diff --git a/force-app/main/default/aura/BGE_ConfigurationWizard/BGE_ConfigurationWizard.cmp b/force-app/main/default/aura/BGE_ConfigurationWizard/BGE_ConfigurationWizard.cmp index 5d3a91e4cf7..cb11bad821c 100644 --- a/force-app/main/default/aura/BGE_ConfigurationWizard/BGE_ConfigurationWizard.cmp +++ b/force-app/main/default/aura/BGE_ConfigurationWizard/BGE_ConfigurationWizard.cmp @@ -122,7 +122,7 @@ -