diff --git a/assets/images/drupal-pa/do-attribute-contribution.png b/assets/images/drupal-pa/do-attribute-contribution.png new file mode 100644 index 0000000000..26d48126ed Binary files /dev/null and b/assets/images/drupal-pa/do-attribute-contribution.png differ diff --git a/assets/images/drupal-pa/do-supporting-organizations.png b/assets/images/drupal-pa/do-supporting-organizations.png new file mode 100644 index 0000000000..26d48126ed Binary files /dev/null and b/assets/images/drupal-pa/do-supporting-organizations.png differ diff --git a/practice-areas/engineering/drupal/onboarding-materials/drupal-for-drupal-engineers.md b/practice-areas/engineering/drupal/onboarding-materials/drupal-for-drupal-engineers.md new file mode 100644 index 0000000000..d82b59877c --- /dev/null +++ b/practice-areas/engineering/drupal/onboarding-materials/drupal-for-drupal-engineers.md @@ -0,0 +1,115 @@ +--- +title: Drupal for Drupal engineers +--- + +# Drupal for Drupal engineers + +## Follow coding standards + +We strictly follow established coding standards. Standardized code is more readable and easier to maintain. See the Drupal docs for the latest guidelines: https://www.drupal.org/docs/develop/standards + +## Contributing upstream + +Whenever practical, we want to contribute our changes back to the Drupal community. If a change requires us to patch core or a contributed module, that patch should also be attached to a drupal.org issue. + +First, search the Drupal project for an issue matching the change you need to make. There may already be a patch providing the functionality. + +If you end up using an existing patch, drop a comment indicating that you tested the patch and that it is working (or not) for you. This will help move the issue along its lifecycle. + +If you need to create your own patch, attach it to the issue and update it accordingly. Ensure that the patch file is named according to convention and includes the issue number so that it is convenient to find. + +Your project's technical lead can show you where patch files are stored in your project and explain how they are applied. + +https://www.drupal.org/community/contributor-guide/reference-information/quick-info/life-cycle-of-an-issue +https://www.drupal.org/docs/develop/using-composer/using-composer-with-drupal + +## Version control and the code review process + +CivicActions uses git for version control. Your project's technical lead will explain the process in place for your project and ensure you have access to the relevant repositories. One of your responsibilities as a programmer is to review your peers' changes before merging them. + +When reviewing a change, consider the following factors: + +1. Does the change follow established coding standards? Be picky; we want to hold our code to the highest standards. +2. Is the code well documented? Good documentation answers the question "why?", not "what" or "how." +3. Is this code that you want to maintain going forward? If anything is unclear to you, this is the time to get it clarified. +4. Are there any typos or bugs? +5. Does the code make any assumptions that may not always be true? For example, assuming an array key exists that might not? + +## Resources and opportunities + +### Drupal practice area + +Drupal is one of CivicActions Practice Areas. We use the #engineering-drupal Slack channel and have monthly calls. + +To be invited to the monthly call, please post a message in the Slack channel and one of your colleagues will add you. You can also find the call on our CivicActions (Primary) calendar. + +Drupal engineers meet each month on Zoom to discuss topics of common interest. Make sure you have been added to the calendar invites. You are encouraged to share your contributions to Drupal.org and the CivicActions Drupal practice area in the Slack channel and on the monthly call. + +The monthly meeting itself is normally scheduled early in the month and follows either a pre-set agenda or the Festivus Format. The Festivus format agenda includes: + +1. One or more Feasts (a discussion, a demo, a presentation) +2. General time of sharing our Feats of Strength, and Airing of Grievances. + +These formats are not set in stone, though; feel free to suggest another format entirely. Even better: volunteer to lead the next call and try something new out! + +More recently, we've been adding agenda items and notes to this document: 2022 Drupal Practice Area Meetings and Agendas to structure our conversations. + +### Drupal practice area OKRs + +CivicActions adopted a standard practice of setting Objectives and Key Results in 2020, based on learnings gleaned from this book: https://www.amazon.com/Measure-What-Matters-Simple-Drives/dp/024134848X/ref=sr_1_1 + +We are still in the process of optimizing our practices in this area. That said, Drupal practice area participants have developed practice area OKRs that merge with CivicActions organizational objectives. OKR discussions happen frequently in practice area calls and + +- Trello board: https://trello.com/b/MH1OIHzV/drupal-practice-area-okrs +- Culture amp: https://civicactions.cultureamp.com/performance/new_goals/department + +### Skillsbase: Complete a self-assessment of your Drupal skills + +A previous year's objective was to gather an inventory of the skills of Drupal Practice Area participants. As part of your onboarding, you should have already completed the skills assessment. If not, you should consider completing it as part of your onboarding to the Drupal practice area. + +Drupal Skills Categories: https://app.skills-base.com/skillcategories/view/id/16 +Skills Assessment: https://app.skills-base.com/people/view#assessments + +### Gotta Drupal problem? We can help! + +One of the most cherished practices is the "30 minute rule" which states, "You are only allowed to be stuck on a problem for 30 minutes before you ask for help." + +The #engineering-drupal channel in Slack is used to reach out to other CivicActions Drupal engineers to ask for help on specific Drupal problems. + +When you ask for help, it's a good idea to provide a context for your problem, describe (or display) the problem, then describe what approaches you've already taken to solve the problem. If you can summarize the nature of the problem in the first sentence, it's more likely you'll get a quick response. + +CivicActions engineers tend to be very helpful, so it's rare for a question not to get a response within a few hours. If for some reason you don't get a response, try a different wording or expand on things you have tried. + +### Contributions to drupal.org + +We encourage all CivicActioners to give back to the Drupal community (see community participation). To track those contributions, follow the instructions below. Doing this helps our Practice Area to be aware of and appreciate your contributions. It also helps our organization as a whole! + +Update your drupal.org profile + +1. Go to http://drupal.org/. +2. Log into your drupal.org account (create one if you do not have one). +3. Align it with CivicActions in the "Work" section: Edit profile > Then expand the Work section > Type in "CivicActions" and your Job title. +4. Align your role with CivicActions in the "Contributor roles" section: Edit profile > Then expand the Contributor roles section > Type in "CivicActions" in "Organization support". See https://www.drupal.org/community/contributor-guide/find-your-role for more details. + +### Contribution to drupal.org modules and themes + +If you have created or are creating a module or a theme and use CivicActions time to work on it — either for a client or as professional development/community participation time — please make sure to add CivicActions under 'Supporting organizations' when editing the module or theme. An example screenshot of what the checkbox looks like: + +![supporting organizations](/assets/images/drupal-pa/do-supporting-organizations.png) + +Adding the organization will ensure that the module and theme will also be attributed to CivicActions. Examples of that can be seen under https://www.drupal.org/civicactions#projects-supported. + +### Contributing to drupal.org issues + +If you are contributing to drupal.org issues for CivicActions and our customers, please make sure to click the box under 'Attribute this contribution'. An example screenshot of what the checkbox looks like: + +![attribute organization](/assets/images/drupal-pa/do-attribute-contribution.png) + +Checking the box and adding the organization and customer will ensure that any credit you receive will also be attributed to CivicActions and the customer. Examples of that can be seen under https://www.drupal.org/civicactions#org-page-issue-credit. + +### External Resources + +- Drupalize.me +- Acquia Academy +- Buildamodule Youtube channel +- D.o helpful links diff --git a/practice-areas/engineering/drupal/onboarding-materials/drupal-for-engineers.md b/practice-areas/engineering/drupal/onboarding-materials/drupal-for-engineers.md new file mode 100644 index 0000000000..56d56aca40 --- /dev/null +++ b/practice-areas/engineering/drupal/onboarding-materials/drupal-for-engineers.md @@ -0,0 +1,29 @@ +--- +title: Drupal for engineers +--- + +# Drupal for engineers + +## Directory structure + +For an overview and brief description of Drupal's directory structure see Directory Structure on drupal.org. + +## Drush + +Drush is a command line tool that assists with, and speeds up many common Drupal tasks. For example, rather than having to click through the UI to do something like install a new module, you can use a single drush command to do it for you. There are a lot of other commands in drush that can do things like generate boilerplate code, run migrations, or clear cache. You can read more about drush on their site https://www.drush.org. + +## Caching + +Caching is the process of storing files in a temporary storage, or cache. The reason that websites, browsers and many different applications use a cache is because it greatly increases performance. For CivicActions, there are usually several layers of cache that we need to be aware of. + +The first layer is the browser cache. Browsers will save copies of all, or most of the content of a webpage on the device's hard drive. This way, when the user re-visits the webpage, the browser won't have to re-download all of the content and can bring up the page much quicker. + +The second layer that most teams will need to be aware of is the Drupal cache. Most of our sites will have Drupal core's internal page cache module enabled. This makes it so that pages are cached for any anonymous users visiting the site. When the first anonymous user visits a Drupal page, Drupal will save the results of any queries or requests that it performs into its cache. It will then serve those cached results for all anonymous users. The time that Drupal holds on to these results can be altered in the administrative interface. + +After these first two layers, there can be several other layers of caching depending on your site's hosting and any CDNs you may be using. You should check with the engineers on your team if you'd like to learn more about these extra layers of caching. + +If you've made some changes to your site, but the changes aren't showing up, you might need to rebuild the cache in one of, or all of these different layers. In Drupal, clearing the cache can be done from the administrative interface (/admin/config/development/performance) or with a drush command ('drush cache:rebuild' or 'drush cr'). You can clear the cache in your browser by using the browser's settings (this process may differ between browsers). There are also some contributed modules such as Purge and Akamai Purge that can help with rebuilding the cache in some of the extra caching layers that your site may have. + +## Accessibility, security, performance + +Needs content diff --git a/practice-areas/engineering/drupal/onboarding-materials/drupal-for-everyone.md b/practice-areas/engineering/drupal/onboarding-materials/drupal-for-everyone.md new file mode 100644 index 0000000000..c8fdfe0007 --- /dev/null +++ b/practice-areas/engineering/drupal/onboarding-materials/drupal-for-everyone.md @@ -0,0 +1,37 @@ +--- +title: Drupal for everyone +--- + +# Drupal for everyone + +CivicActions was an early adopter of Drupal in 2004 and it has been a core technology utilized by our company since, from progressive non-profits to NGOs, to government agencies helping serve the public. Our employees include 25+ module maintainers maintaining 60+ modules, 10+ core contributors, 35+ community contributors, members of key Drupal teams, organizers of key Drupal camps and cons. Previous employees have developed important Drupal distributions and modules that have made their way into Drupal core. Drupal has been a vital part of many of our successes and our commitment to Drupal keeps growing. + +## Why should everyone at CivicActions know about Drupal? + +As a core technology used by CivicActions, it is important for everyone at CA to have a degree of familiarity with Drupal regardless of role. This familiarity can deepen your understanding of the interactions a client has with the products and services that CA provides. You become a better gauge of a client's needs and of how those needs can be met (both in terms of approach and effort). + +Drupal is supported by a large community and CivicActions strives to be a contributing and positive presence. While our participation in the community is driven by an alignment of interests, values and principles, our participation also has the pragmatic effects of highlighting the Drupal-expertise within CivicActions and of attracting new talent. + +Your depth of knowledge about Drupal should at least be commensurate with your role. While there are many resources available, both online and within CivicActions to help you learn, you should also consider participation within the larger Drupal community. Participation is an immersive and meaningful mechanism for learning and opportunities are available for both technical and non-technical roles. + +## What is a CMS? + +CMS is short for content management system. A content management system is a software package that allows users to build and manage a website without having to know how to code it from scratch. They provide a friendly user interface that lets users add content such as styled text, images, and other media to their site. + +## What is OSS? + +From the first year of operations, CivicActions was committed to openness. This openness stemmed from a commitment to the principles behind Free and Open Source Software (FOSS), like Drupal and the same FOSS principles which drive the thriving Drupal community. This radical openness helped to define our culture. Our team members have shared best practices at hundreds of conferences over the years, as well as contributed code to hundreds of FOSS communities beyond Drupal. To this day, we believe in making the world better not only through our client deliverables, but also through sharing our learnings openly. + +## Why do we choose Drupal? + +Drupal is an extremely popular open-source content management system (CMS) used for building websites and applications. [site stats] There are many reasons why some of the most high-trafficked and essential web sites on the internet are built on Drupal: + +- **Customizability:** Drupal is highly customizable in terms of functionality, layout, and design. This makes it an ideal choice for complex websites with specific requirements. + +- **Scalability:** Drupal is highly scalable. It can handle high traffic loads and complex data manipulation. It is used by many high-profile websites and can support businesses as they grow. +- **Community and Support:** Drupal has a vast and active community of developers contributing to its core and creating additional modules (plugins). This ensures that the platform stays up-to-date and can provide support for any issues. +- **Security:** Drupal has a strong reputation for its focus on security. It is known for its proactive community that takes security vulnerabilities very seriously, providing regular updates to address any potential issues. +- **Built-in Web Services:** Drupal 8 and later versions come with built-in web services. This makes it a great choice for building headless applications where the front-end is decoupled from the backend, using Drupal to serve content via an API. +- **Multilingual Capabilities:** Drupal provides robust multilingual features, making it an excellent choice for international and multilingual sites. +- **SEO Friendly:** Drupal's flexibility and configuration options make it SEO-friendly, meaning websites made with Drupal can potentially rank higher in search engines. +- **Content Workflow Management:** Drupal's built-in tools for content creation, workflow, and publishing allow multiple users to collaborate and manage content. diff --git a/practice-areas/engineering/drupal/onboarding-materials/drupal-for-project-teams.md b/practice-areas/engineering/drupal/onboarding-materials/drupal-for-project-teams.md new file mode 100644 index 0000000000..0c1dc18a6f --- /dev/null +++ b/practice-areas/engineering/drupal/onboarding-materials/drupal-for-project-teams.md @@ -0,0 +1,60 @@ +--- +title: Drupal for project teams +--- + +# Drupal for project teams + +## Drupal basics + +### Logging in + +The /user/login route (https://some.site/user/login) will bring you to the form to log in to your drupal site. Depending on your project this route will likely be overridden to allow for single sign-on to be used. Single sign on is a service that allows users to have a single set of credentials for multiple applications. It is also worth noting that depending on your project there may be different processes in place for requesting access to be able to log in to your project's Drupal site(s). Refer to your project's onboarding documentation for gaining access to your site(s). + +### Content management basics + +As a content management system, Drupal's primary purpose is to allow users to create content with as little technical knowledge as possible. Some of the tools that it uses to allow users to create meaningful content are listed below. As a project team, part of our responsibility is to tailor these tools to our client's needs. + +- **Entity Types, Bundles & Entities:** In Drupal an entity type is a grouping of fields. Bundles are extensions of entity types, or sub-types. Entities are then instances of an entity type/bundle. For instance, an entity type can have several fields where editors or site administrators can enter content or other data. When these fields are filled out and submitted, an entity is created with the data from the fields. For those familiar with object-oriented patterns, An entity type can be thought of as a class. A bundle would be a subclass or extended class of the entity type. An entity would then be an instance or object of those classes. [Read more about entities.](https://www.drupal.org/docs/user_guide/en/planning-data-types.html) [Read more about the Entity API.](https://www.drupal.org/docs/drupal-apis/entity-api/introduction-to-entity-api-in-drupal-8) +- **Nodes:** A node is an entity type that is provided by Drupal core. Most content on most sites is going to be stored as nodes. Nodes can be further divided into other bundles such as articles, blog posts, or other custom content-types (bundles). [Read more about nodes.](https://www.drupal.org/docs/core-modules-and-themes/core-modules/node-module/about-nodes) +- **Menus:** Menus are collections of links used for navigation in websites. Drupal comes standard with several menus including the main navigation. Links can be added to or removed from menus using the admin interface. [Read more about menus.](https://www.drupal.org/docs/user_guide/en/menu-concept.html) +- **Taxonomy:** Taxonomy is a way to categorize or classify different content on a site. Taxonomy terms provide a list of vocabularies or allow users to add new vocabulary on the fly that pieces of content can be 'tagged' with. [Read more about taxonomy.](https://www.drupal.org/docs/user_guide/en/structure-taxonomy.html) +- **Aliases & Redirects:** These allow site builders and editors to create more readable urls to content on the site. So instead of seeing a path like /node/12345 you could specify an alias of /some-content-title. [Read more about aliases and redirects.](https://www.drupal.org/docs/user_guide/en/content-paths.html) + +## Drupal site administration + +### Users, roles and permissions + +Being able to control which users are able to see or do different things on your site is one of the major benefits of using a CMS like Drupal. In Drupal this is handled by giving users certain roles which have certain permissions. Drupal comes with a few roles by default, they are: + +- **Anonymous users:** Any user that visits your site who is not currently logged in. This role typically has very few permissions. Most of the permissions assigned to this role are going to be for viewing certain pieces of content. +- **Authenticated users:** These are users who are logged in to your site. Depending on the site, authenticated users could have many permissions, or they might have very few permissions - similar to anonymous users. +- **Administrator:** This is typically the role that you give to users who should have full administrative privileges to the site. +- **Content Editor:** This role has been included by default since Drupal 9.3. It was added with permissions for content editing, media management, translation, content workflow and revision handling permissions. As with all roles, it can be modified to suit your needs. + +You also have the ability to create additional roles however you see fit. For example, maybe your site allows users to sign up to be able to make comments on certain pieces of content. You might want to create a new role for commenters that gives them permissions that are different from, or more limited than, content editors, but not as limited as 'Authenticated users'. + +You can read more about users, roles, and permissions in the [Drupal User Guide](https://www.drupal.org/docs/user_guide/en/user-chapter.html). + +### Modules + +The many different pieces of functionality on a Drupal site are typically broken down into different modules. Modules are sets of code that extend features and add functionality to your site. Modules can be turned on or off by installing or uninstalling the module. + +The many different pieces of functionality on a Drupal site are typically broken down into different modules. Modules are basically sets of code that extend features and add functionality to your site. Modules can be turned on or off by installing or uninstalling the module. + +There are several modules that come shipped with core Drupal, and there are thousands more that can be downloaded and installed from contributors. + +When you are looking for a feature that is not shipped with Drupal core, then it is best practice to search drupal.org for a contributed module that fits your needs. If there isn't one that fits your needs exactly but it comes close, it might be best to ask the maintainers of the module for a feature request. This can be done in the issue queue for the module on drupal.org. If you are able to contribute your own solution you can do so using the same issue queue and performing a merge request. + +If you come across a situation where there is not a contributed module, then it might be best to have your team create a custom module for your use-case. Keep in mind that somebody else may need this same feature eventually, so you should think about contributing your custom module back to the Drupal community as a contributed module. + +### Themes + +Themes are the set of files (generally html and css) that determine how your site 'looks and feels.' Drupal comes with several basic themes. There are also many contributed themes available, some paid and some for free. Generally, however, most site administrators are going to create their own theme. They'll do this by either extending an already established theme (like the ones provided by core) or create an entirely new theme. + +There are usually two different themes installed and enabled on a site at one time. One theme is for the content and the other is for the administrative interface. + +### Views + +Views are listings of content on your site. Drupal's views are highly customizable and provide many different ways that you can list content. Drupal comes with two modules for using views on your site. The first module is the Views module which handles displaying the view to the user. The second is the Views UI module which allows users (with the right permissions) to create and edit their views via the administrative interface. An example use-case for a view could be a news site landing page that shows teasers of news articles sorted by date published. + +### Code, database and configuration diff --git a/practice-areas/engineering/drupal/onboarding-materials/drupal-glossary.md b/practice-areas/engineering/drupal/onboarding-materials/drupal-glossary.md new file mode 100644 index 0000000000..4cd997bb60 --- /dev/null +++ b/practice-areas/engineering/drupal/onboarding-materials/drupal-glossary.md @@ -0,0 +1,109 @@ +--- +title: Drupal glossary +--- + +# Drupal glossary + +## Bundle + +Entity types can be organized into bundles. Each bundle represents a different configuration of the entity and has its own fields. For example, the node entity type usually has multiple bundles such as "Basic page" and "Blog post". This affords site builders the opportunity to share functionality across multiple types of content. + +"Basic page" and "Blog post" share multiple fields common to Nodes such as Author, Path and Publishing Status. Users have none of these. But if you want to add a field to only Basic pages, you can do that because Basic page is a bundle. + +## Code + +Files that control the behavior of a website (or other application). These are stored in the project's Version Control System and updates are deployed during each release. + +## Content + +Broadly, this can apply to any content on the site. Within the context of the Drupal UI, though, "Content" almost always refers specifically to nodes. + +## Content Type + +This refers to the bundles of the node entity type. Examples include "Basic pages" and "Blog posts", though it's common for each Drupal site to have its own business-specific content types (for instance, NSF's content types include Solicitations and Programs, which are documents that are specific to NSF's workflow). + +## Config + +Short for "Configuration;" in the context of Drupal, Config refers to a specific way of storing data. Some site information, especially information that is relatively static, will be stored in YAML files within the site's codebase, in addition to being stored in the database. This has a number of benefits for development, such as being able to track changes to the data using the Version Control System (VCS). There are also drawbacks; in most cases, a code deployment will include reverting all database changes to the values that are stored in the config files. This means that changes made to data stored in config must also be "exported" to the site's existing configuration files after the changes have been made to the database via the UI, or those changes will be lost the next time configuration is reverted. + +## Contrib + +Short for "Contributed," contrib refers to the universe of modules and other code that is contributed by the community for common use. Drupal is open source which means that anyone can implement changes to the code. Most modules work the same way; here at CivicActions we participate fully in Drupal's open source ecosystem both by using contributed modules and contributing any of our own fixes and changes that we need back "upstream" to the module maintainers. + +Contributed modules are distinct from Core modules in that they are not maintained by the Drupal Association. + +## Core + +This refers to code that is maintained by the Drupal Association. It includes everything you get when you download an installation of Drupal. + +## Custom + +This refers to the code that CivicActions programmers have produced to meet the particular needs of CA's clients. Whenever it makes sense, we contribute our work back to the contrib ecosystem. But most of the business logic that we program is too specific to our clients to be useful to anyone else. This stays within our own Version Control System (VCS) and our team is responsible for its maintenance. + +## Database + +An application that specializes in storing, relating and retrieving data. Code running on the web server queries the database whenever website content is read or modified. The kind of databases that Drupal uses store their data in "tables" which can be visualized as very large spreadsheets. The database has features to make it possible to retrieve large amounts of complex data quickly and efficiently. + +## Deploy + +When a new version of a website's code is uploaded to a server, this is called a code deployment. + +## Entity + +In Drupal, an Entity is a data record that can be correlated to other records in a structured way. Entity is almost always short for fieldable entity which means an entity that makes use of Drupal's robust fields system. Entities and fields are core concepts of Drupal's content management and you'll encounter these terms frequently. + +Broadly, an entity is a logical grouping of data that has a type and ID. For example, one entity type that exists on almost every Drupal site is "User". A User entity must have a discrete internal identifier (ID) so that the system can tell one user from another. This ID is almost always a number like 123 and is usually hidden from users. + +A user also has fields which are data that relate to an entity. For example, "Email address," "Name," "Password" and "Last login date" are all fields. Note that none of these bits of data are useful on their own; it doesn't help us to store an email address if we don't know which user it belongs to. This is why the entity ID is so important, even if users never see it. If a User changes their email address, we can do so without impacting their other data because everything is tied together through that entity ID. + +By adding a field to an entity type, all entities of that type will have access to that field (even if the field may be empty at first). It is also possible to organize an entity into Bundles, each of which has its own set of fields. + +## Field + +A discrete bit of data attached to an entity. + +## Fieldable Entity + +See Entity + +## Fieldgroup + +## Fieldset + +## Git + +The most common modern Version Control System. + +## Module + +Most of Drupal's code is organized into modules. This is what makes Drupal so extensible and customizable. Drupal core provides a handful of modules, but there are many more contrib modules maintained by the community + +Each module provides a relatively narrow and discrete bit of functionality. For example, the Menu core module provides Drupal's base menu functionality. Building on that, the Menu Delete contrib module makes a small change to that functionality, allowing content editors to delete multiple menus at once. By mixing and matching which modules are enabled on a site, we can leverage the community's efforts to provide a lot of functionality with little (or sometimes no) custom code. + +## Node + +A Node is an entity type that is built into Drupal. Almost all Drupal sites use the Node module. Nodes are commonly used to store user-facing website content. Common properties of all nodes include a Title, a URL path and an author. Common Node Bundles include "Basic Page" and "Blog Post". + +## Paragraph + +Paragraphs is a contrib module which adds a new entity type called a "paragraph." These are fieldable like other entities, but must be attached to an existing entity using a reference field. Paragraphs are commonly used when you have a group of fields that may be repeated on an entity, but do not make any sense as data on their own. For instance, you might have a node for a resumè, with paragraphs for each line of the CV. Each paragraph entity would have its own title, description, start date and end date (fields), and the whole list of paragraphs would be attached to a field on the resumè entity like "field_job_history." + +## Paragraph Type + +Paragraph Types are the bundles for the paragraph entity type. So each paragraph type can have its own fields. + +## Patch + +A patch is a file that can be applied to some code to make a controlled, reproducible change to that code. More colloquially, we talk about "patching" code when we're making a change to fix a bug or add a missing piece of functionality. Because the contrib ecosystem can sometimes move slowly, patches often become a necessary part of using contributed code. If a fix is available for a bug, but the module maintainer has not yet implemented it, we will use a patch file to point repair the bug until the maintainer implements the patch into the module. + +## Site builder + +Version Control System (VCS) + +An application used by our programming teams. The most common of these is git. Version control is an important part of any software project as it allows multiple developers to work concurrently on the same code without accidentally overwriting each other's work. It also provides a complete history of changes to the code that can be referred to as documentation, or in extreme cases used to roll back to a previous version. + +## View + +Views is a core module (as of Drupal 8, prior to this it was contrib) that provides powerful list-making functionality. Any list of content on your site is probably powered by a view. +Web Server +An application that specializes in serving data (generally in the form of web pages) in response to requests from a web client (such as a browser). You can think of it as another computer that your computer is connecting to in a structured way (known as a protocol), although nowadays most servers are distributed across hardware and even multiple datacenters. In concert with the database, the web server does most of the work of delivering content to visitors.