diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 4a4a6e00f7..5451c81d7f 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -2,75 +2,99 @@
## 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 age, body
-size, disability, ethnicity, sex characteristics, gender identity and expression,
-level of experience, education, socio-economic status, nationality, personal
-appearance, race, religion, or sexual identity and orientation.
+We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for
+everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity
+and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste,
+color, religion, or sexual identity and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
## Our Standards
-Examples of behavior that contributes to creating a positive environment
-include:
+Examples of behavior that contributes to a positive environment for our community 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 towards other community members
+ Demonstrating empathy and kindness toward other people
+ Being respectful of differing opinions, viewpoints, and experiences
+ Giving and gracefully accepting constructive feedback
+ Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
+ Focusing on what is best not just for us as individuals, but for the overall community
-Examples of unacceptable behavior by participants include:
+Examples of unacceptable behavior include:
-* The use of sexualized language or imagery and unwelcome sexual attention or
- advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing 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
+ The use of sexualized language or imagery, and sexual attention or advances of any kind
+ Trolling, insulting or derogatory comments, and personal or political attacks
+ Public or private harassment
+ Publishing others’ private information, such as a physical or email address, without their explicit permission
+ Other conduct which could reasonably be considered inappropriate in a professional setting
-## 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.
+## Enforcement Responsibilities
-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 to this Code of Conduct, or to ban temporarily or
-permanently any contributor for other behaviors that they deem inappropriate,
+Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior
+and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate,
threatening, offensive, or harmful.
+Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits,
+issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for
+moderation decisions when appropriate.
+
## 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 e-mail
-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.
+This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing
+the community in public spaces. Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed representative at an online or offline event.
## Enforcement
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by contacting the project team at action@comptroller.nyc.gov. All
-complaints will be reviewed and investigated and will result in a response that
-is deemed necessary and appropriate to the circumstances. The project team 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.
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible
+for enforcement at action@comptroller.nyc.gov. All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem
+in violation of this Code of Conduct:
+
+1. Correction
+
+Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
+
+Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and
+an explanation of why the behavior was inappropriate. A public apology may be requested.
+
+2. Warning
+
+Community Impact: A violation through a single incident or series of actions.
+
+Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including
+unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding
+interactions in community spaces as well as external channels like social media. Violating these terms may lead to a
+temporary or permanent ban.
+
+3. Temporary Ban
+
+Community Impact: A serious violation of community standards, including sustained inappropriate behavior.
+
+Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified
+period of time. No public or private interaction with the people involved, including unsolicited interaction with those
+enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
+
+4. Permanent Ban
+
+Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior,
+harassment of an individual, or aggression toward or disparagement of classes of individuals.
+
+Consequence: A permanent ban from any sort of public interaction within the community.
+
## Attribution
-This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
-available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+This Code of Conduct is adapted from the Contributor Covenant, version 2.1,
+available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
-[homepage]: https://www.contributor-covenant.org
+Community Impact Guidelines were inspired by Mozilla’s code of conduct enforcement ladder.
-For answers to common questions about this code of conduct, see
-https://www.contributor-covenant.org/faq
+For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq.
+Translations are available at https://www.contributor-covenant.org/translations.
\ No newline at end of file
diff --git a/INSTALL.md b/INSTALL.md
index 5415e51952..7676165297 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -24,7 +24,7 @@ standardize deployment, and we are conducting that work in the open,
with participation from all interested parties. The code's authors,
who are intimately familiar with every step of the process, naturally
can and do regularly deploy production instances to
- -- but various improvements need to be made
+ -- but various improvements need to be made
to these instructions before that process is equally easy for
newcomers.
@@ -45,26 +45,25 @@ Requirements
Please note that unlike most Drupal-based applications, Checkbook uses
two separate databases simultaneously:
- * MySQL for the application itself (essentially Drupal + some modules)
+ * MySQL/MariaDB for the application itself (essentially Drupal + some modules)
* PostgreSQL for the financial data (usually much larger than the app)
The full list of dependencies is:
* GNU/Linux or similar operating system
- * Drupal 7.x _(Note: Checkbook includes Drupal, so don't download Drupal separately.)_
- * PHP 5.3 or higher
- * MySQL 5.0.15 or higher ( -- we have not tested
- with a drop-in replacement such as MariaDB
- but would be interested to know if it works)
- * PostgreSQL 8.3 or higher ( -- any
- database that supports PostgresSQL is compatible for storing
- Checkbook data (e.g., PostgreSQL, Greenplum)
+ * Drupal 9.5 _(Note: Checkbook includes Drupal, so you don't need to download Drupal separately.)_
+ * PHP 8.1.6 or higher with the following extensions enabled:
+ - PHP Intl extension ()
+ - PHP PostgreSQL extension ()
+ * MySQL 5.7.8 or higher () or
+ MariaDB 10.3.7 or higher ()
+ * PostgreSQL 9.2 or higher () -- other
+ data warehouse products derived from PostgreSQL (e.g. Greenplum Database,
+ Amazon Redshift) are also compatible for storing Checkbook data
* psql client (PostgreSQL command line interface)
- * Apache HTTPD with following PHP extensions
- - PHP Intl extension ()
- - PHP PostgreSQL extension ()
- * Solr 4.* search platform ()
- * Drush version 5.0 (Drupal command-line scripting tool)
+ * Apache HTTPD 2.4.7 or higher with mod_rewrite enabled
+ * Solr 7.4.x search platform ()
+ * Drush 11.x (Drupal command-line scripting tool)
The Checkbook distribution includes the Drupal source tree, along with
additional (non-core) custom and contributed Drupal modules used by
@@ -76,16 +75,15 @@ Optional configuration for scalability and performance
------------------------------------------------------
These instructions assume you're deploying Checkbook on a single
-server, that is, where httpd, the databases, and Tomcat+Solr are all
-running on one machine.
+server, that is, where httpd, the databases, and Solr are all running
+on a single instance.
While this is okay for test deployments, in production you might want
-to divide services among multiple machines, and (for example) use:
+to divide services among multiple instances, and (for example) use:
* A load balancer for distributing requests across multiple instances.
* Varnish or any other reverse proxy cache for caching last access pages.
- * PGPool for distributing load across multiple PostgreSQL or
- Greenplum databases.
+ * PGPool for distributing load across multiple PostgreSQL databases.
If you are configuring for scalability and performance in this way,
then parts of the instructions below will need adjustment, of course.
@@ -93,11 +91,11 @@ then parts of the instructions below will need adjustment, of course.
Installation
------------
-We assume that a GNU/Linux server with LAMP stack is installed.
+We assume that a GNU/Linux server with basic system utilities is installed.
The following assumptions are also made about the installation:
- * The webroot is `/var/www/html`.
- (It could be somewhere else; `/var/www/html` is just the location
+ * The webroot is `/var/www/html`
+ (It could be somewhere else; `/var/www/html` is just the standard location
we use in these instructions.)
The initial installation of the GNU/Linux server with LAMP stack takes on average 20 minutes.
@@ -116,21 +114,16 @@ Steps to install:
2. Ensure you have the necessary dependencies installed.
- On Ubuntu 12.04 Server, that looks like this (Debian GNU/Linux
- should be pretty similar):
+ On Ubuntu 22.04, you can install the necessary packages like this
+ (Debian GNU/Linux should be pretty similar):
$ sudo apt-get update
- $ sudo apt-get install php5
- $ sudo apt-get install php5-gd
- $ sudo apt-get install php5-intl
- $ sudo apt-get install php5-mysql
- $ sudo apt-get install php5-pgsql
+ $ sudo apt-get install apache2 php8.1 php8.1-gd php8.1-intl php8.1-mysql php8.1-pgsql
$ sudo apt-get install mysql-server
$ sudo apt-get install postgresql
$ sudo apt-get install postgresql-client
$ sudo apt-get install postgresql-contrib
$ sudo apt-get install git
- $ sudo apt-get install drush
$ sudo apt-get install apache2
$ sudo apt-get install openjdk-6-jre-headless
$ sudo apt-get install zip
diff --git a/INSTALL.txt b/INSTALL.txt
new file mode 100644
index 0000000000..5219b6a770
--- /dev/null
+++ b/INSTALL.txt
@@ -0,0 +1,461 @@
+
+CONTENTS OF THIS FILE
+---------------------
+
+ * Quickstart
+ * Requirements and notes
+ * Optional server requirements
+ * Installation
+ * Reinstall
+ * Building and customizing your site
+ * Multisite configuration
+ * Multilingual configuration
+
+QUICKSTART
+----------------------
+
+Prerequisites:
+- PHP 7.4.0 (or greater) (https://php.net).
+
+In the instructions below, replace the version x.y.z with the specific version
+you wish to download. Example: 8.6.0.zip. You can find the latest stable version
+at https://www.drupal.org/project/drupal.
+
+Download and extract the Drupal package:
+- curl -sS https://ftp.drupal.org/files/projects/drupal-x.y.z.zip --output drupal-x.y.z.zip
+- unzip drupal-x.y.z.zip
+- cd /path/to/drupal-x.y.z
+- php core/scripts/drupal quick-start
+
+Wait… installation can take a minute or two. A successful installation will
+result in opening the new site in your browser.
+
+Run the following command for a list of available options that you may need to
+configure quick-start:
+- php core/scripts/drupal quick-start --help
+
+Follow the instructions in the REINSTALL section below to start over.
+
+NOTE: This quick start solution uses PHP's built-in web server and is not
+intended for production use. Read more about how to run Drupal in a production
+environment below.
+
+REQUIREMENTS AND NOTES
+----------------------
+
+Drupal requires:
+
+- A web server with PHP support, for example:
+ - Apache 2.4.7 (or greater) (http://httpd.apache.org/).
+ - Nginx 1.1 (or greater) (http://nginx.com/).
+- PHP 7.4.0 (or greater) (http://php.net/). For better security support it is
+ recommended to update to at least 8.1.0.
+- One of the following databases:
+ - MySQL 5.7.8 (or greater) (http://www.mysql.com/).
+ - MariaDB 10.3.7 (or greater) (https://mariadb.org/). MariaDB is a fully
+ compatible drop-in replacement for MySQL.
+ - Percona Server 5.7.8 (or greater) (http://www.percona.com/). Percona
+ Server is a backwards-compatible replacement for MySQL.
+ - PostgreSQL 10 (or greater) (http://www.postgresql.org/).
+ - SQLite 3.26 (or greater) (http://www.sqlite.org/).
+
+For more detailed information about Drupal requirements, including a list of
+PHP extensions and configurations that are required, see "System requirements"
+(https://www.drupal.org/docs/system-requirements) in the Drupal.org online
+documentation.
+
+For detailed information on how to configure a test server environment using a
+variety of operating systems and web servers, see "Local server setup"
+(https://www.drupal.org/node/157602) in the Drupal.org online documentation.
+
+Note that all directories mentioned in this document are always relative to the
+directory of your Drupal installation, and commands are meant to be run from
+this directory (except for the initial commands that create that directory).
+
+OPTIONAL SERVER REQUIREMENTS
+----------------------------
+
+- If you want to use Drupal's "Clean URLs" feature on an Apache web server, you
+ will need the mod_rewrite module and the ability to use local .htaccess
+ files. For Clean URLs support on IIS, see "Clean URLs with IIS"
+ (https://www.drupal.org/node/3854) in the Drupal.org online documentation.
+
+- If you plan to use XML-based services such as RSS aggregation, you will need
+ PHP's XML extension. This extension is enabled by default on most PHP
+ installations.
+
+- To serve gzip compressed CSS and JS files on an Apache web server, you will
+ need the mod_headers module and the ability to use local .htaccess files.
+
+- Some Drupal functionality (e.g., checking whether Drupal and contributed
+ modules need updates, RSS aggregation, etc.) require that the web server be
+ able to go out to the web and download information. If you want to use this
+ functionality, you need to verify that your hosting provider or server
+ configuration allows the web server to initiate outbound connections. Most web
+ hosting setups allow this.
+
+INSTALLATION
+------------
+
+1. Download and extract Drupal.
+
+ You can obtain the latest Drupal release from https://www.drupal.org -- the
+ files are available in .tar.gz and .zip formats and can be extracted using
+ most compression tools.
+
+ To download and extract the files, on a typical Unix/Linux command line, use
+ the following commands (assuming you want version x.y.z of Drupal in .tar.gz
+ format):
+
+ wget https://www.drupal.org/files/projects/drupal-x.y.z.tar.gz
+ tar -zxvf drupal-x.y.z.tar.gz
+
+ This will create a new directory drupal-x.y.z/ containing all Drupal files
+ and directories. Then, to move the contents of that directory into a
+ directory within your web server's document root or your public HTML
+ directory, continue with this command:
+
+ mv drupal-x.y.z/* drupal-x.y.z/.htaccess drupal-x.y.z/.csslintrc drupal-x.y.z/.editorconfig drupal-x.y.z/.eslintignore drupal-x.y.z/.eslintrc.json drupal-x.y.z/.gitattributes /path/to/your/installation
+
+ You can also download the latest version of Drupal using Git on the command
+ line and set up a repository by following the instructions at
+ https://www.drupal.org/project/drupal/git-instructions for "Setting up
+ repository for the first time".
+
+ Once you have downloaded Drupal successfully, you may install Composer
+ globally using the instructions at
+ https://getcomposer.org/doc/00-intro.md#globally
+
+ With Composer installed, run the following command from the Drupal web root:
+
+ composer install
+
+2. Create the Drupal database.
+
+ Because Drupal stores all site information in a database, the Drupal
+ installer will attempt to create this database for you. If you create the
+ database manually, you must grant Drupal certain database privileges (such as
+ the ability to create tables). For details, consult INSTALL.mysql.txt,
+ INSTALL.pgsql.txt, or INSTALL.sqlite.txt. You may also need to consult your
+ web hosting provider for instructions specific to your web host.
+
+ Take note of the username, password, database name, and hostname as you
+ create the database. You will enter this information during the install.
+
+3. Run the install script.
+
+ To run the install script, point your browser to the base URL of your
+ website (e.g., http://www.example.com).
+
+ You will be guided through several screens to set up the database, add the
+ site maintenance account (the first user, also known as user/1), and provide
+ basic website settings.
+
+ During installation, several files and directories need to be created, which
+ the install script will try to do automatically. However, on some hosting
+ environments, manual steps are required, and the install script will tell
+ you that it cannot proceed until you fix certain issues. This is normal and
+ does not indicate a problem with your server.
+
+ The most common steps you may need to perform are:
+
+ a. Missing files directory.
+
+ The install script will attempt to create a public file storage directory
+ in the default location at sites/default/files (the location of the files
+ directory may be changed after Drupal is installed).
+
+ If auto-creation fails, you can create the directory yourself. (If you are
+ creating a multisite installation, substitute the correct sites directory
+ for sites/default; see the Multisite Configuration section of this file,
+ below.) Sample commands from a Unix/Linux command line:
+
+ mkdir sites/default/files
+ chmod a+w sites/default/files
+
+ Alternatively, you can make the install script work by changing
+ permissions on the sites/default directory. The web server can then
+ create the files directory within it for you.
+
+ For example, on a Unix/Linux command line, you can grant everyone
+ (including the web server) permission to write to the sites/default
+ directory with this command:
+
+ chmod a+w sites/default
+
+ Then re-run install.php (e.g. by clicking "try again" at the bottom of
+ the Requirements problem page. Once the files directory is created, you
+ will need to grant everyone (including the web server) permission to
+ write to it with this command:
+
+ chmod a+w sites/default/files
+
+ Be sure to set the permissions for the default directory back after the
+ installation is finished! (Leave the files directory writable.)
+ Sample command:
+
+ chmod go-w sites/default
+
+ b. Missing settings file.
+
+ Drupal will try to automatically create a settings.php configuration file,
+ which is normally in the directory sites/default (to avoid problems when
+ upgrading, Drupal is not packaged with this file). If auto-creation fails,
+ you will need to create this file yourself, using the file
+ sites/default/default.settings.php as a template.
+
+ For example, on a Unix/Linux command line, you can make a copy of the
+ default.settings.php file with the command:
+
+ cp sites/default/default.settings.php sites/default/settings.php
+
+ Next, grant write privileges to the file to everyone (including the web
+ server) with the command:
+
+ chmod a+w sites/default/settings.php
+
+ Be sure to set the permissions back after the installation is finished!
+ Sample command:
+
+ chmod go-w sites/default/settings.php
+
+ c. Write permissions after install.
+
+ The install script will attempt to write-protect the settings.php file and
+ the sites/default directory after saving your configuration. If this
+ fails, you will be notified, and you can do it manually. Sample commands
+ from a Unix/Linux command line:
+
+ chmod go-w sites/default/settings.php
+ chmod go-w sites/default
+
+4. Verify that the site is working.
+
+ When the install script finishes, you will be logged in with the site
+ maintenance account on a "Welcome" page. If the default Drupal theme is not
+ displaying properly and links on the page result in "Page Not Found" errors,
+ you may be experiencing problems with clean URLs. Visit
+ https://www.drupal.org/docs/8/clean-urls-in-drupal-8 to troubleshoot.
+
+5. Change file system storage settings (optional).
+
+ The files directory created in step 3 is the default file system path used to
+ store all uploaded files, as well as some temporary files created by
+ Drupal. After installation, you can modify the file system path to store
+ uploaded files in a different location.
+
+ It is not necessary to modify this path, but you may wish to change it if:
+
+ - Your site runs multiple Drupal installations from a single codebase (modify
+ the file system path of each installation to a different directory so that
+ uploads do not overlap between installations).
+
+ - Your site runs on a number of web servers behind a load balancer or reverse
+ proxy (modify the file system path on each server to point to a shared file
+ repository).
+
+ - You want to restrict access to uploaded files.
+
+ To modify the file system path:
+
+ a. Ensure that the new location for the path exists and is writable by the
+ web server. For example, to create a new directory named uploads and grant
+ write permissions, use the following commands on a Unix/Linux command
+ line:
+
+ mkdir uploads
+ chmod a+w uploads
+
+ b. Open your settings.php in a plain-text editor, and uncomment (remove the #
+ at the start of line) this line:
+
+ # $settings['file_public_path'] = 'sites/default/files';
+
+ Enter the desired path and save the file.
+
+ If you want to use private file storage, you need to uncomment (remove
+ the # at the start of line) the following line in settings.php:
+
+ # $settings['file_private_path'] = '';
+
+ Enter the path for private files and save the file.
+
+ Changing the file system path after files have been uploaded may cause
+ unexpected problems on an existing site. If you modify the file system path
+ on an existing site, remember to copy all files from the original location
+ to the new location.
+
+6. Revoke documentation file permissions (optional).
+
+ Some administrators suggest making the documentation files, especially
+ CHANGELOG.txt, non-readable so that the exact version of Drupal you are
+ running is slightly more difficult to determine. If you wish to implement
+ this optional security measure, from a Unix/Linux command line you can use
+ the following command:
+
+ chmod a-r core/CHANGELOG.txt
+
+ Note that the example only affects CHANGELOG.txt. To completely hide all
+ documentation files from public view, repeat this command for each of the
+ Drupal documentation files in the installation directory, substituting the
+ name of each file for CHANGELOG.txt in the example.
+
+ For more information on setting file permissions, see "Modifying Linux,
+ Unix, and Mac file permissions" (https://www.drupal.org/node/202483) or
+ "Modifying Windows file permissions" (https://www.drupal.org/node/202491) in
+ the Drupal.org online documentation.
+
+7. Set up independent "cron" maintenance jobs.
+
+ Many Drupal modules have tasks that must be run periodically, including the
+ Search module (building and updating the index used for keyword searching),
+ the Aggregator module (retrieving feeds from other sites), and the System
+ module (performing routine maintenance and pruning of database tables). These
+ tasks are known as "cron maintenance tasks", named after the Unix/Linux
+ "cron" utility.
+
+ When you install Drupal, its built-in cron feature is enabled, which
+ automatically runs the cron tasks periodically, triggered by people visiting
+ pages of your site. You can configure the built-in cron feature by navigating
+ to Administration > Configuration > System > Cron.
+
+ It is also possible to run the cron tasks independent of site visits; this is
+ recommended for most sites. To do this, you will need to set up an automated
+ process to visit the page /cron on your site, which executes the cron
+ tasks.
+
+ The URL of the cron page requires a "cron key" to protect against
+ unauthorized access. Your site's cron key is automatically generated during
+ installation and is specific to your site. The full URL of the page, with the
+ cron key, is available in the "Cron maintenance tasks" section of the Status
+ report page at Administration > Reports > Status report.
+
+ As an example of how to set up this automated process, you can use the
+ crontab utility on Unix/Linux systems. The following crontab line uses the
+ wget command to visit the cron page, and runs each hour, on the hour:
+
+ 0 * * * * wget -O - -q -t 1 http://example.com/cron/YOURKEY
+
+ Replace the text "http://example.com/cron/YOURKEY" in the example with the
+ full URL displayed under "Cron maintenance tasks" on the "Status report"
+ page.
+
+ More information about cron maintenance tasks is available at
+ https://www.drupal.org/docs/administering-a-drupal-site/cron-automated-tasks,
+ and sample cron shell scripts can be found in the core/scripts/ directory.
+ (Note that these scripts must be customized like the above example, to add
+ your site-specific cron key and domain name.)
+
+REINSTALL
+------------
+
+Drupal can be reinstalled without downloading and extracting the Drupal release.
+
+1. Drop all the tables in your database.
+
+2. Remove everything in sites/default/files.
+
+3. Remove sites/default/settings.php.
+
+4. Follow the Installation Instructions above starting from Step 3 (Run the
+ install script).
+
+BUILDING AND CUSTOMIZING YOUR SITE
+----------------------------------
+
+A new installation of Drupal defaults to a very basic configuration. To extend
+your site, you use "modules" and "themes". A module is a plugin that adds
+functionality to Drupal, while a theme changes the look of your site. The core
+of Drupal provides several optional modules and themes, and you can download
+more at https://www.drupal.org/project/project_module and
+https://www.drupal.org/project/project_theme
+
+Do not mix downloaded or custom modules and themes with Drupal's core modules
+and themes. Drupal's modules and themes are located in the /core/modules and
+/core/themes directories, while the modules and themes you add to Drupal are
+normally placed in the /modules and /themes directories. If you run a multisite
+installation, you can also place modules and themes in the site-specific
+directories -- see the Multisite Configuration section, below.
+
+Never edit Drupal's core modules and themes; instead, use the hooks available in
+the Drupal API. To modify the behavior of Drupal, develop a module as described
+at https://www.drupal.org/developing/modules. To modify the look of Drupal,
+create a subtheme as described at https://www.drupal.org/node/2165673, or a
+completely new theme as described at https://www.drupal.org/docs/8/theming
+
+MULTISITE CONFIGURATION
+-----------------------
+
+A single Drupal installation can host several Drupal-powered sites, each with
+its own individual configuration.
+
+For this to work you need the file sites/sites.php to exist. Make a copy of
+the example.sites.php file:
+
+ $ cp sites/example.sites.php sites/sites.php
+
+Additional site configurations are created in subdirectories within the 'sites'
+directory. Each subdirectory must have a 'settings.php' file, which specifies
+the configuration settings. The easiest way to create additional sites is to
+copy file 'default.settings.php' from the 'sites/default' directory into the
+new site directory with file name 'settings.php' and modify as appropriate.
+The new directory name is constructed from the site's URL. The configuration
+for www.example.com could be in 'sites/example.com/settings.php' (note that
+'www.' should be omitted if users can access your site at http://example.com/).
+
+ $ cp sites/default/default.settings.php sites/example.com/settings.php
+
+Sites do not have to have a different domain. You can also use subdomains and
+subdirectories for Drupal sites. For example, example.com, sub.example.com, and
+sub.example.com/site3 can all be defined as independent Drupal sites. The setup
+for a configuration such as this would look like the following:
+
+ sites/default/settings.php
+ sites/example.com/settings.php
+ sites/sub.example.com/settings.php
+ sites/sub.example.com.site3/settings.php
+
+When searching for a site configuration (for example www.sub.example.com/site3),
+Drupal will search for configuration files in the following order, using the
+first configuration it finds:
+
+ sites/www.sub.example.com.site3/settings.php
+ sites/sub.example.com.site3/settings.php
+ sites/example.com.site3/settings.php
+ sites/www.sub.example.com/settings.php
+ sites/sub.example.com/settings.php
+ sites/example.com/settings.php
+ sites/default/settings.php
+
+If you are installing on a non-standard port, the port number is treated as the
+deepest subdomain. For example: http://www.example.com:8080/ could be loaded
+from sites/8080.www.example.com/. The port number will be removed according to
+the pattern above if no port-specific configuration is found, just like a real
+subdomain.
+
+Each site configuration can have its own site-specific modules and themes in
+addition to those installed in the standard 'modules' and 'themes' directories.
+To use site-specific modules or themes, simply create a 'modules' or 'themes'
+directory within the site configuration directory. For example, if
+sub.example.com has a custom theme and a custom module that should not be
+accessible to other sites, the setup would look like this:
+
+ sites/sub.example.com/
+ settings.php
+ themes/custom_theme
+ modules/custom_module
+
+For more information about multiple virtual hosts or the configuration
+settings, consult https://www.drupal.org/docs/8/multisite
+
+For more information on configuring Drupal's file system path in a multisite
+configuration, see step 6 above.
+
+MULTILINGUAL CONFIGURATION
+--------------------------
+
+By default, Drupal is installed in one language, and further languages may be
+installed later.
+
+For detailed instructions, visit
+https://www.drupal.org/docs/8/multilingual
diff --git a/LICENSE.md b/LICENSE.txt
similarity index 99%
rename from LICENSE.md
rename to LICENSE.txt
index b5aaaa2cfd..2c007722a0 100644
--- a/LICENSE.md
+++ b/LICENSE.txt
@@ -1,4 +1,4 @@
-Copyright (C) 2012, 2013 New York City
+Copyright (C) 2012 - 2023 New York City
Checkbook NYC is free software: you can redistribute it and modify
it under the terms of the GNU Affero General Public License (AGPL)
@@ -8,7 +8,7 @@ License or (at your option) any later version.
Checkbook NYC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Affero General Public License included below for more details.
+GNU Affero General Public License included below for more details.
The license can also be seen at .
@@ -218,12 +218,12 @@ terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
-
+
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
-
+
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
@@ -231,7 +231,7 @@ terms of section 4, provided that you also meet all of these conditions:
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
-
+
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
@@ -258,7 +258,7 @@ in one of these ways:
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
-
+
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
@@ -270,13 +270,13 @@ in one of these ways:
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
-
+
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
-
+
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
@@ -289,7 +289,7 @@ in one of these ways:
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
-
+
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
@@ -369,21 +369,21 @@ that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
-
+
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
-
+
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
-
+
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
-
+
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
-
+
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
@@ -650,17 +650,17 @@ the "copyright" line and a pointer to where the full notice is found.
Copyright (C)
-
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
-
+
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
diff --git a/phpunit.xml b/phpunit.xml
deleted file mode 100644
index 05bbb80206..0000000000
--- a/phpunit.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
- source/tests/unit/tests
-
-
-
-
- source/webapp/sites/all/modules/custom
- source/webapp/sites/all/modules/custom
- source/webapp/sites/all/modules/custom
-
-
-
-
-
-
-
-
-