<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mbabker</id>
	<title>Joomla! Documentation - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mbabker"/>
	<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/Special:Contributions/Mbabker"/>
	<updated>2026-07-04T02:01:49Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Duplicate_usernames_cause_update_issue&amp;diff=648718</id>
		<title>J3.x:Duplicate usernames cause update issue</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Duplicate_usernames_cause_update_issue&amp;diff=648718"/>
		<updated>2020-03-10T16:47:08Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
In some websites, updating to Joomla 3.9.16 results in a database error due to duplicated usernames. If this happens do not panic - the upgrade has been mostly completed without issue, and the remaining database change can be applied after following the instructions below.&lt;br /&gt;
&lt;br /&gt;
==Errors reported==&lt;br /&gt;
Users receive an update error regarding a failed database query due to a duplicated key in their site&#039;s &amp;lt;source lang=&amp;quot;sql&amp;quot; inline&amp;gt;#__users&amp;lt;/source&amp;gt; table when upgrading from Joomla 3.9.15 or older.&lt;br /&gt;
[[File:76331128-c6389180-62ff-11ea-81d6-14cd3e5ab28d.png|thumb|Joomla 3.9.16 Upgrade Error]]&lt;br /&gt;
&lt;br /&gt;
==Versions affected==&lt;br /&gt;
{{tip|This pertains only to Joomla! version(s): &#039;&#039;&#039;3.9.16&#039;&#039;&#039;|title=General Information}}&lt;br /&gt;
&lt;br /&gt;
==What is the cause==&lt;br /&gt;
Your website has more than one user in the &amp;lt;source lang=&amp;quot;sql&amp;quot; inline&amp;gt;#__users&amp;lt;/source&amp;gt; table with the same username, which is a security concern in that the incorrect account may be accessed by the wrong account owner.&lt;br /&gt;
&lt;br /&gt;
==How to fix==&lt;br /&gt;
You will need to review your &amp;lt;source lang=&amp;quot;sql&amp;quot; inline&amp;gt;#__users&amp;lt;/source&amp;gt; table in your database and fix any duplicated usernames by either removing old user accounts or changing the username until all usernames are unique. Once this is finished, if you have already upgraded to 3.9.16 run the database schema fixer tool to finish the upgrade (this step is not required if you do this review prior to upgrading).&lt;br /&gt;
&lt;br /&gt;
Joomla is unable to automatically determine the correct action to take and as a result is unable to perform this step for you - it has to be fixed by you as the site owner.&lt;br /&gt;
&lt;br /&gt;
The following SQL Query can be run on your database to view which usernames are duplicated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot; inline&amp;gt;SELECT username FROM #__users GROUP BY username HAVING COUNT(*) &amp;gt; 1&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Version 3.9 FAQ]]&lt;br /&gt;
[[Category:Version 3.9.16 FAQ]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Joomla! 3.9]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Duplicate_usernames_cause_update_issue&amp;diff=648715</id>
		<title>J3.x:Duplicate usernames cause update issue</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Duplicate_usernames_cause_update_issue&amp;diff=648715"/>
		<updated>2020-03-10T16:43:58Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Revisions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In a small number of sites (generally older sites) there have been issues upgrading to Joomal 3.9.16 showing a SQL Error. If this happens do not panic - the upgrade has largely completed on your site and you need to make a small adjustment as detailed below.&lt;br /&gt;
&lt;br /&gt;
==Errors reported==&lt;br /&gt;
Users receive an update error regarding a failed database query due to a duplicated key in their site&#039;s &amp;lt;pre&amp;gt;#__users&amp;lt;/pre&amp;gt; table when upgrading from Joomla 3.9.15 or older.&lt;br /&gt;
[[File:76331128-c6389180-62ff-11ea-81d6-14cd3e5ab28d.png|thumb|Joomla 3.9.16 Upgrade Error]]&lt;br /&gt;
&lt;br /&gt;
==Versions affected==&lt;br /&gt;
{{tip|This pertains only to Joomla! version(s): &#039;&#039;&#039;3.9.16&#039;&#039;&#039;|title=General Information}}&lt;br /&gt;
&lt;br /&gt;
==What is the cause==&lt;br /&gt;
Your website has more than one user in the &amp;lt;pre&amp;gt;#__users&amp;lt;/pre&amp;gt; table with the same username, which is a security concern in that the incorrect account may be accessed by the wrong account owner.&lt;br /&gt;
&lt;br /&gt;
==How to fix==&lt;br /&gt;
You will need to review your &amp;lt;pre&amp;gt;#__users&amp;lt;/pre&amp;gt; table in your database and fix any duplicated usernames by either removing old user accounts or changing the username until all usernames are unique. Once this is finished, if you have already upgraded to 3.9.16 run the database schema fixer tool to finish the upgrade (this step is not required if you do this review prior to upgrading).&lt;br /&gt;
&lt;br /&gt;
Joomla is unable to automatically determine the correct action to take and as a result is unable to perform this step for you - it has to be fixed by you as the site owner.&lt;br /&gt;
&lt;br /&gt;
The following SQL Query can be run on your database to view which usernames are duplicated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot; inline&amp;gt;SELECT username FROM #__users GROUP BY username HAVING COUNT(*) &amp;gt; 1&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Version 3.9 FAQ]]&lt;br /&gt;
[[Category:Version 3.9.16 FAQ]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Joomla! 3.9]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Install_from_Web&amp;diff=599279</id>
		<title>Install from Web</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Install_from_Web&amp;diff=599279"/>
		<updated>2019-04-05T12:20:03Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Add 2.0.1 release&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
The Joomla Install from Web feature was added as part of {{JVer|3.2|Joomla! 3.2|long}} to make installing extensions from the [http://extensions.joomla.org Joomla! Extensions Directory (JED)].&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
To enable it simply go into the Joomla Extension Manager and click on the notice at the top to install the extra plugin needed for it to function (Note there are known issues with Akeeba Backup hiding this message).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Video Demo== &amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
You can see a video walk through of the Install from web feature here:&amp;lt;/translate&amp;gt; http://www.youtube.com/watch?v=P33D24gNEUk&lt;br /&gt;
&lt;br /&gt;
{{#Widget:YouTube|id=P33D24gNEUk}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Information for Extension Developers== &amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
If you already have an extension on JED then you need to make a few small changes to get your extension working on the Joomla Extension Finder. [[S:MyLanguage/Install From Web For Developers|Click Here]] for more information.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Plugin versions== &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
* 1.0.2 Initial released version with Joomla 3.2.0 Stable&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
* 1.0.3 Minor fix for translations escapings (server-side fix for &amp;quot;Sort by rating&amp;quot; to correspond to JED)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
* 1.0.4 Minor addition for support of display of commercial/non-commercial &amp;quot;$&amp;quot; icon and for number of reviews and votes in category views (server-side: Same additions and fix of sorting in leaf-category view by rating to reflect JED sorting)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
* 1.0.5 Mandatory upgrade for Joomla 3.2.1 to adapt to a change in Javascript introduced by Joomla 3.2.1&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
* 1.1.0 was a maintenance release of the plugin.&amp;lt;/translate&amp;gt;&lt;br /&gt;
* &amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt; 2.0.0 is an upgrade of the plugin&#039;s internal handling to be compatible with the core version of the plugin included in Joomla! 4.0. This version requires Joomla! 3.9 or 3.10 to be used.  Please see https://github.com/joomla-extensions/install-from-web-client/releases/tag/2.0.0 for further details about this update.&amp;lt;/translate&amp;gt;&lt;br /&gt;
2.0.1 is a maintenance release which restores JSONP support to address browser security changes.  Please see https://github.com/joomla-extensions/install-from-web-client/releases/tag/2.0.1 for further details about this update.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Extensions{{#translation:}}]]&lt;br /&gt;
[[Category:Extension development{{#translation:}}]]&lt;br /&gt;
[[Category:Extension Installation{{#translation:}}]]&lt;br /&gt;
[[Category:Video{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Install_from_Web&amp;diff=598829</id>
		<title>Install from Web</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Install_from_Web&amp;diff=598829"/>
		<updated>2019-04-04T03:49:46Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Add 2.0 release&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
The Joomla Install from Web feature was added as part of {{JVer|3.2|Joomla! 3.2|long}} to make installing extensions from the [http://extensions.joomla.org Joomla! Extensions Directory (JED)].&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
To enable it simply go into the Joomla Extension Manager and click on the notice at the top to install the extra plugin needed for it to function (Note there are known issues with Akeeba Backup hiding this message).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Video Demo== &amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
You can see a video walk through of the Install from web feature here:&amp;lt;/translate&amp;gt; http://www.youtube.com/watch?v=P33D24gNEUk&lt;br /&gt;
&lt;br /&gt;
{{#Widget:YouTube|id=P33D24gNEUk}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Information for Extension Developers== &amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
If you already have an extension on JED then you need to make a few small changes to get your extension working on the Joomla Extension Finder. [[S:MyLanguage/Install From Web For Developers|Click Here]] for more information.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Plugin versions== &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
* 1.0.2 Initial released version with Joomla 3.2.0 Stable&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
* 1.0.3 Minor fix for translations escapings (server-side fix for &amp;quot;Sort by rating&amp;quot; to correspond to JED)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
* 1.0.4 Minor addition for support of display of commercial/non-commercial &amp;quot;$&amp;quot; icon and for number of reviews and votes in category views (server-side: Same additions and fix of sorting in leaf-category view by rating to reflect JED sorting)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
* 1.0.5 Mandatory upgrade for Joomla 3.2.1 to adapt to a change in Javascript introduced by Joomla 3.2.1&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
* 1.1.0 was a maintenance release of the plugin.&amp;lt;/translate&amp;gt;&lt;br /&gt;
* 2.0.0 is an upgrade of the plugin&#039;s internal handling to be compatible with the core version of the plugin included in Joomla! 4.0. This version requires Joomla! 3.9 or 3.10 to be used.  Please see https://github.com/joomla-extensions/install-from-web-client/releases/tag/2.0.0 for further details about this update.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
[[Category:Extension development]]&lt;br /&gt;
[[Category:Extension Installation]]&lt;br /&gt;
[[Category:Video]]&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584513</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584513"/>
		<updated>2018-12-18T03:05:17Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: /* Post Release Actions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general checklist for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;This document is a work in progress.&#039;&#039; The information on this page is currently undergoing a major revision.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
= CMS Release Cycle =&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums], in close coordination with the [https://volunteers.joomla.org/teams/bug-squad Bug Squad] and [https://volunteers.joomla.org/teams/cms-release-team CMS Release Team], should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 3.9.1 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt;: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next major release (the branch&#039;s name will always be the version it represents)&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that staging is merged to the next minor branch and the next minor branch is merged to the next major branch):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt; should be merged into &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
== Preparing To Release ==&lt;br /&gt;
When scheduling and preparing a release, the timeline should be communicated with the Production and Marketing &amp;amp; Communication Department leadership so that all teams are prepared to support the release. Note that when scheduling releases, consideration should be given to holidays around the world and the impact of issuing a release near those periods considered. Helpful resources include http://interfaith-calendar.org/ and https://www.timeanddate.com/holidays/&lt;br /&gt;
&lt;br /&gt;
=== Review Release Milestone and Blockers ===&lt;br /&gt;
On GitHub, check the [https://github.com/joomla/joomla-cms/milestones milestone] for the release you are preparing to create and for any open items with the [https://github.com/joomla/joomla-cms/labels/release-blocker release-blocker] label. If there are remaining open items, review them to determine if they are items that should be included in the release or if they can be rescheduled to a later release.&lt;br /&gt;
&lt;br /&gt;
=== Release Schedule ===&lt;br /&gt;
==== Minor Release ====&lt;br /&gt;
Given the nature of a minor release, the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* Six weeks prior to planned stable release: Tag the first Beta release&lt;br /&gt;
** At this point the release should be considered feature complete and new features should be deferred to the next minor release&lt;br /&gt;
* Weekly Beta releases should follow this until the Release Candidate&lt;br /&gt;
* Two weeks prior to planned stable release: Tag the Release Candidate&lt;br /&gt;
** At this point the release branch (generally &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt;) should remain closed for committing except for high priority bug fixes and language updates&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* One week prior to planned stable release: If necessary, create a second Release Candidate&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
==== Maintenance Release ====&lt;br /&gt;
Maintenance releases operate on a 4-6 week cycle and the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* 4-5 days before planned release date: Tag a Release Candidate&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
=== Reviewing Release Changes ===&lt;br /&gt;
Before tagging a release, the list of changes in the release should be reviewed by the release manager and/or leadership team. The list of changes can be found using GitHub&#039;s compare function with the URL &amp;lt;tt&amp;gt;https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...staging&amp;lt;/tt&amp;gt; which will compare the changes from &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; to the current staging branch (for example, https://github.com/joomla/joomla-cms/compare/3.9.0...3.9.1-rc is the comparison from the 3.9.0 release tag to the 3.9.1-rc tag). Key purposes of this review include:&lt;br /&gt;
&lt;br /&gt;
* Ensuring all patches are compliant with Semantic Versioning (SemVer) (i.e. no backward compatibility breaks in minor or maintenance releases and no features in maintenance releases); SemVer violations should be cleared with the Production Department leadership&lt;br /&gt;
* Ensuring all code revisions are compatible with Joomla&#039;s minimum supported versions (i.e. no PHP 5.4 syntax in 3.x releases where PHP 5.3 is the minimum supported version, exceptions may be made if introducing a code path and files that will only be executed on newer PHP versions)&lt;br /&gt;
** Joomla&#039;s testing integrations should not be relied on in full for this as there are large portions of the Joomla code base which do not have automated test coverage, and as of this writing, there is not a code linting process in place checking for potential issues&lt;br /&gt;
* Ensuring features and &amp;quot;significant&amp;quot; changes are documented&lt;br /&gt;
&lt;br /&gt;
=== Security Fixes ===&lt;br /&gt;
From time to time, security fixes must be included in a release. Prior to every release, the release manager should check with the [https://volunteers.joomla.org/teams/security-strike-team Security Strike Team] to determine if security fixes are required, and if so ensure this is communicated to all members involved with release work (i.e. the marketing team liaison who assists with the publication of release related material). When a security release is necessary, an internal Release Candidate should be built for testing by the Security Strike Team, CMS Release Team, and [https://volunteers.joomla.org/teams/cms-maintenance-team CMS Maintenance Team] with all security patches included. These teams should also receive information about the vulnerabilities being addressed to ensure there are no regressions in the impacted areas.&lt;br /&gt;
&lt;br /&gt;
Note, when a security fix involves a Joomla Framework package, the Framework package should be patched first and a release created of the affected package then the CMS updated with &amp;lt;tt&amp;gt;composer update&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Building a Release ==&lt;br /&gt;
Building a release starts with checking that any files and folders that have been deleted are included in the arrays in the installer script at &amp;lt;tt&amp;gt;administrator/components/com_admin/script.php&amp;lt;/tt&amp;gt;. There is a helper script in the repository to assist with this located at &amp;lt;tt&amp;gt;build/deleted_file_check.php&amp;lt;/tt&amp;gt;. Running &amp;lt;tt&amp;gt;php build/deleted_file_check.php&amp;lt;/tt&amp;gt; with its required &amp;lt;tt&amp;gt;--from&amp;lt;/tt&amp;gt; option will write a file to &amp;lt;tt&amp;gt;build/deleted_files.txt&amp;lt;/tt&amp;gt; with the list of files deleted since the from reference. Please see the PHP file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
The following steps require the individual to create commits and tags. It is suggested that these commits and tags be GPG signed as an extra security step but this is not a mandatory requirement as of this writing.&lt;br /&gt;
&lt;br /&gt;
If creating a security release, at this point you should apply all patches provided by the security team.&lt;br /&gt;
&lt;br /&gt;
Once it is confirmed that the deleted files listing is correct, the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script should be executed to set the new version number. This script will also perform maintenance steps such as correcting the copyright year ranges for all files and replacing the &amp;lt;tt&amp;gt;__DEPLOY_VERSION__&amp;lt;/tt&amp;gt; placeholder. Please see the file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
After running this script, review all changes with &amp;lt;tt&amp;gt;git diff&amp;lt;/tt&amp;gt; as a final check before creating your release commit. Once you are satisfied that all changes are correct, commit your changes locally. Once committed, create the release tag locally; all release tags should be the version number you are creating and should match the output of &amp;lt;tt&amp;gt;Joomla\CMS\Version::getShortVersion()&amp;lt;/tt&amp;gt; (so if you have created 3.9.0-beta2 then the tag should be named 3.9.0-beta2).&lt;br /&gt;
&lt;br /&gt;
Once the tag has been created, you will run the &amp;lt;tt&amp;gt;build/build.php&amp;lt;/tt&amp;gt; script to generate the release packages. To ensure a clean build is produced, the script makes an archive of the tag you are building using the &amp;lt;tt&amp;gt;git archive&amp;lt;/tt&amp;gt; command and extracts this to the &amp;lt;tt&amp;gt;build/tmp/&amp;lt;timestamp&amp;gt;&amp;lt;/tt&amp;gt; directory. Depending on the patch version number, the following packages will be created in the &amp;lt;tt&amp;gt;build/tmp/packages&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* 0: Full installation and upgrade packages&lt;br /&gt;
* 1: Full installation, upgrade packages, and patch packages for x.y.0 to x.y.1&lt;br /&gt;
* 2+: Full installation, upgrade packages, patch packages for x.y.0 to x.y.&amp;lt;new&amp;gt; and x.y.&amp;lt;new-1&amp;gt; to x.y.&amp;lt;new&amp;gt; (i.e. when creating 3.8.8 this will create a patch package suitable for all 3.8.x releases and an optimized patch package for 3.8.7 to 3.8.8)&lt;br /&gt;
&lt;br /&gt;
Additionally, the script will generate a &amp;lt;tt&amp;gt;build/tmp/checksums.txt&amp;lt;/tt&amp;gt; file with the checksums for all generated packages.&lt;br /&gt;
&lt;br /&gt;
After the packages are created, you should validate that you are able to install and update a site using the ZIP packages (as these are the most frequently used type and served by our update system).&lt;br /&gt;
&lt;br /&gt;
== Publishing a Release ==&lt;br /&gt;
=== Release Packages ===&lt;br /&gt;
Depending on the type of release being created, you will publish the release packages in different locations.&lt;br /&gt;
&lt;br /&gt;
==== Alpha, Beta, Release Candidate ====&lt;br /&gt;
The packages for these releases are uploaded to GitHub. When ready to publish, you should push the release tag you created to GitHub and use their interface to create a release from the tag and upload the packages. There is a text template used for the releases, generally you can copy a previous release&#039;s text and adjust it to the version you are publishing.&lt;br /&gt;
&lt;br /&gt;
==== Stable ====&lt;br /&gt;
The packages for stable releases are uploaded to multiple locations, this is in part driven by the fact that the Amazon Web Services (AWS) S3 region used by Joomla is blocked in some locations therefore download mirrors are available when necessary.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Downloads Portal =====&lt;br /&gt;
The canonical source for all stable releases is the [https://downloads.joomla.org/ Joomla! Downloads Portal]. The packages served from the site use Joomla&#039;s AWS account. You will need to log into the AWS console to upload the packages to S3 under the &amp;lt;tt&amp;gt;joomla-official-downloads&amp;lt;/tt&amp;gt; bucket. The exact path inside the bucket is &amp;lt;tt&amp;gt;joomladownloads/joomla&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; where &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; is the major version number (i.e. &amp;lt;tt&amp;gt;joomla3&amp;lt;/tt&amp;gt;), note for compatibility with Akeeba Release System folders for each individual release are not used.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Update Server =====&lt;br /&gt;
The Joomla! Update Server is used as a mirror for the download packages. After connecting to the server, you should create a new folder at &amp;lt;tt&amp;gt;www/releases/&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; (i.e. &amp;lt;tt&amp;gt;www/releases/3.9.1&amp;lt;/tt&amp;gt; for the 3.9.1 release) and upload the packages here.&lt;br /&gt;
&lt;br /&gt;
===== GitHub =====&lt;br /&gt;
The packages are also uploaded to GitHub. This is similar to the steps for alpha, beta, and release candidate releases above. Note that you only need to push the release tag at this point (i.e. &amp;lt;tt&amp;gt;git push --tags&amp;lt;/tt&amp;gt;), you can wait to push the updated release branch until after the release is available.&lt;br /&gt;
&lt;br /&gt;
=== Announcements ===&lt;br /&gt;
==== joomla.org ====&lt;br /&gt;
For all stable releases, the main release announcement is published to the &amp;lt;tt&amp;gt;Joomla! Official News &amp;gt; Project Release News&amp;lt;/tt&amp;gt; category on the main &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; website.&lt;br /&gt;
&lt;br /&gt;
For a minor release, an updated version of the landing page at &amp;lt;tt&amp;gt;joomla.org/3&amp;lt;/tt&amp;gt; is published. Generally, this site is backed up from the sandbox location and transferred to the live domain shortly before release, this transfer should be coordinated with the [https://volunteers.joomla.org/teams/webmasters-team Webmasters Team].&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
For security releases, all accompanying articles are published to the &amp;lt;tt&amp;gt;News &amp;gt; Security Centre&amp;lt;/tt&amp;gt; category on the Joomla! Developer Network. As these articles are referenced from the main release announcement, these should be published at the same time.&lt;br /&gt;
&lt;br /&gt;
== Update Server ==&lt;br /&gt;
The update server must be updated to alert websites that a core update is available, this subdomain is managed on GitHub at https://github.com/joomla/update.joomla.org. Prior to each release, a pull request should be prepared with necessary changes for the release (generally this updates the version number, announcement URL, package URLs, and package checksums for the stable release and updating the version number for the nightly builds), see https://github.com/joomla/update.joomla.org/pull/117 as an example of this update for the 3.9.1 release. Pushes to the &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch of this repo are automatically deployed thanks to a Jenkins job, notifications for many of the Jenkins jobs are sent to the &amp;lt;tt&amp;gt;.org Build Notifications&amp;lt;/tt&amp;gt; channel on RingCentral Glip so you should ensure a success notification was sent here otherwise check if there was an issue with the job and/or manually deploy the updated files.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;update.joomla.org&amp;lt;/tt&amp;gt; subdomain is behind a CDN and it generally takes 5-10 minutes for all nodes to update, if need be you can access &amp;lt;tt&amp;gt;update1.joomla.org&amp;lt;/tt&amp;gt; to verify the right files are deployed without using the CDN.&lt;br /&gt;
&lt;br /&gt;
== Post Release Actions ==&lt;br /&gt;
Once the release is published, there are several additional tasks that should be completed shortly after.&lt;br /&gt;
&lt;br /&gt;
=== Post-Release Version Bump ===&lt;br /&gt;
The version should be bumped to the next version scheduled for release using the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script (i.e. after the 3.9.1 release this would be bumped to 3.9.2-dev).&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
After incrementing the version number, you should merge all the release changes forward to other active branches (especially in the case of a security release). Ensure you pay careful attention while resolving merge conflicts, when making a merge that includes a version bump generally all files which contain the version string and/or release date will be in conflict (as of this writing this is 8 files).&lt;br /&gt;
&lt;br /&gt;
=== Push Updated Branches ===&lt;br /&gt;
When ready, you should directly push your updates to the Git repo. If you elect to use pull requests, the pull requests should NEVER be squashed or rebased otherwise this will wipe out Git&#039;s awareness of the merged commits and will make your next branch merges even more complex. Likewise, as an example, if the commit preparing the 3.9.1 release and bumping the version string to 3.9.2-dev were squash merged as a pull request, then the commit that the 3.9.1 release was tagged from would not be in the repository.&lt;br /&gt;
&lt;br /&gt;
=== Update Release Milestones ===&lt;br /&gt;
On GitHub, all merged items are assigned to a milestone to help organize items. With each release, the [https://github.com/joomla/joomla-cms/milestones milestones] should be updated to ensure that the milestone for the release you created has been closed and a milestone for the next release is open.&lt;br /&gt;
&lt;br /&gt;
=== Regenerate Nightly Builds ===&lt;br /&gt;
The nightly builds for any branch updated during the release process should be regenerated to include the release&#039;s changes. These can be manually triggered within the &amp;lt;tt&amp;gt;CMS Packaging&amp;lt;/tt&amp;gt; folder on the Jenkins server.&lt;br /&gt;
&lt;br /&gt;
=== Website Updates ===&lt;br /&gt;
With all code updates pushed, there are several website updates that need to be triggered.&lt;br /&gt;
&lt;br /&gt;
==== api.joomla.org ====&lt;br /&gt;
With each release, an updated build of the API documentation should be deployed to the &amp;lt;tt&amp;gt;api.joomla.org&amp;lt;/tt&amp;gt; website. These updates are triggered with the &amp;lt;tt&amp;gt;Joomla! API &amp;gt; Deploy Docs - CMS&amp;lt;/tt&amp;gt; job on Jenkins. As this job relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed.&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
After a release, the &amp;lt;tt&amp;gt;Joomla! Project Roadmap&amp;lt;/tt&amp;gt; article in the &amp;lt;tt&amp;gt;Uncategorised&amp;lt;/tt&amp;gt; category should be updated to reflect the newly released version and updated links. The version whitelist for the statistics server should also be updated to allow the next version to be submitted; if you have not already, you should have a clone of the https://github.com/joomla/statistics-server repository on your local system. Once cloned and set up, run the &amp;lt;tt&amp;gt;bin/stats tags:joomla&amp;lt;/tt&amp;gt; command to regenerate the Joomla version whitelist. As this command relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed. The updated &amp;lt;tt&amp;gt;versions/joomla.json&amp;lt;/tt&amp;gt; should be committed and pushed, and a Jenkins job will deploy the updated site resources.&lt;br /&gt;
&lt;br /&gt;
== Additional Considerations ==&lt;br /&gt;
The release manager or a delegate is suggested to be in communication with the Webmasters Team to ensure the &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; websites are updated in a timely manner. When a security release is scheduled, it is encouraged to share the update release package with the team so that our sites may be updated before the fix is made public to mitigate the chance of the vulnerability being used to exploit one of our sites.&lt;br /&gt;
&lt;br /&gt;
= Framework Release Cycle =&lt;br /&gt;
The packages of the Joomla Framework are on an independent lifecycle meaning each package can be updated and released independently of all others. Generally the only restriction is with major releases, which should coincide with the CMS release cycle (i.e. CMS 3.x uses Framework 1.x, CMS 4.x will use Framework 2.x therefore Framework 2.0 stable releases should not be made until the CMS is in its beta phase at the earliest).&lt;br /&gt;
&lt;br /&gt;
== Tagging a Release ==&lt;br /&gt;
Most packages can be tagged and released through the &amp;lt;tt&amp;gt;Joomla! Framework &amp;gt; Package Release&amp;lt;/tt&amp;gt; job on Jenkins, however as of this writing this job only supports tagging releases from a repository&#039;s &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch. To tag a release, select the package you wish to update and specify the version you are releasing in the job&#039;s parameters and run the job; all releases should follow Semantic Versioning to set the correct number.&lt;br /&gt;
&lt;br /&gt;
Once the job has completed, you should verify the new release is visible on [https://packagist.org/packages/joomla/ Packagist]. Within a day, the new update should be visible on the [https://framework.joomla.org/status Joomla Framework Status page] (the database is updated via cron job reading from Packagist&#039;s API), if the updated version isn&#039;t seen on the site in a relatively timely manner you should clone the website locally and debug the &amp;lt;tt&amp;gt;packagist:sync:releases&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
== Security Releases ==&lt;br /&gt;
When a security release is created, a pull request should be sent to the [https://github.com/FriendsOfPHP/security-advisories FriendsOfPHP/security-advisories repository] with relevant details. This repository is used by many tools in the PHP and Composer ecosystem to alert users of security issues. https://github.com/FriendsOfPHP/security-advisories/pull/134 is an example of this pull request.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584512</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584512"/>
		<updated>2018-12-18T02:47:59Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: /* Review Release Milestone and Release Blockers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general checklist for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;This document is a work in progress.&#039;&#039; The information on this page is currently undergoing a major revision.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
= CMS Release Cycle =&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums], in close coordination with the [https://volunteers.joomla.org/teams/bug-squad Bug Squad] and [https://volunteers.joomla.org/teams/cms-release-team CMS Release Team], should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 3.9.1 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt;: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next major release (the branch&#039;s name will always be the version it represents)&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that staging is merged to the next minor branch and the next minor branch is merged to the next major branch):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt; should be merged into &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
== Preparing To Release ==&lt;br /&gt;
When scheduling and preparing a release, the timeline should be communicated with the Production and Marketing &amp;amp; Communication Department leadership so that all teams are prepared to support the release. Note that when scheduling releases, consideration should be given to holidays around the world and the impact of issuing a release near those periods considered. Helpful resources include http://interfaith-calendar.org/ and https://www.timeanddate.com/holidays/&lt;br /&gt;
&lt;br /&gt;
=== Review Release Milestone and Blockers ===&lt;br /&gt;
On GitHub, check the [https://github.com/joomla/joomla-cms/milestones milestone] for the release you are preparing to create and for any open items with the [https://github.com/joomla/joomla-cms/labels/release-blocker release-blocker] label. If there are remaining open items, review them to determine if they are items that should be included in the release or if they can be rescheduled to a later release.&lt;br /&gt;
&lt;br /&gt;
=== Release Schedule ===&lt;br /&gt;
==== Minor Release ====&lt;br /&gt;
Given the nature of a minor release, the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* Six weeks prior to planned stable release: Tag the first Beta release&lt;br /&gt;
** At this point the release should be considered feature complete and new features should be deferred to the next minor release&lt;br /&gt;
* Weekly Beta releases should follow this until the Release Candidate&lt;br /&gt;
* Two weeks prior to planned stable release: Tag the Release Candidate&lt;br /&gt;
** At this point the release branch (generally &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt;) should remain closed for committing except for high priority bug fixes and language updates&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* One week prior to planned stable release: If necessary, create a second Release Candidate&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
==== Maintenance Release ====&lt;br /&gt;
Maintenance releases operate on a 4-6 week cycle and the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* 4-5 days before planned release date: Tag a Release Candidate&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
=== Reviewing Release Changes ===&lt;br /&gt;
Before tagging a release, the list of changes in the release should be reviewed by the release manager and/or leadership team. The list of changes can be found using GitHub&#039;s compare function with the URL &amp;lt;tt&amp;gt;https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...staging&amp;lt;/tt&amp;gt; which will compare the changes from &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; to the current staging branch (for example, https://github.com/joomla/joomla-cms/compare/3.9.0...3.9.1-rc is the comparison from the 3.9.0 release tag to the 3.9.1-rc tag). Key purposes of this review include:&lt;br /&gt;
&lt;br /&gt;
* Ensuring all patches are compliant with Semantic Versioning (SemVer) (i.e. no backward compatibility breaks in minor or maintenance releases and no features in maintenance releases); SemVer violations should be cleared with the Production Department leadership&lt;br /&gt;
* Ensuring all code revisions are compatible with Joomla&#039;s minimum supported versions (i.e. no PHP 5.4 syntax in 3.x releases where PHP 5.3 is the minimum supported version, exceptions may be made if introducing a code path and files that will only be executed on newer PHP versions)&lt;br /&gt;
** Joomla&#039;s testing integrations should not be relied on in full for this as there are large portions of the Joomla code base which do not have automated test coverage, and as of this writing, there is not a code linting process in place checking for potential issues&lt;br /&gt;
* Ensuring features and &amp;quot;significant&amp;quot; changes are documented&lt;br /&gt;
&lt;br /&gt;
=== Security Fixes ===&lt;br /&gt;
From time to time, security fixes must be included in a release. Prior to every release, the release manager should check with the [https://volunteers.joomla.org/teams/security-strike-team Security Strike Team] to determine if security fixes are required, and if so ensure this is communicated to all members involved with release work (i.e. the marketing team liaison who assists with the publication of release related material). When a security release is necessary, an internal Release Candidate should be built for testing by the Security Strike Team, CMS Release Team, and [https://volunteers.joomla.org/teams/cms-maintenance-team CMS Maintenance Team] with all security patches included. These teams should also receive information about the vulnerabilities being addressed to ensure there are no regressions in the impacted areas.&lt;br /&gt;
&lt;br /&gt;
Note, when a security fix involves a Joomla Framework package, the Framework package should be patched first and a release created of the affected package then the CMS updated with &amp;lt;tt&amp;gt;composer update&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Building a Release ==&lt;br /&gt;
Building a release starts with checking that any files and folders that have been deleted are included in the arrays in the installer script at &amp;lt;tt&amp;gt;administrator/components/com_admin/script.php&amp;lt;/tt&amp;gt;. There is a helper script in the repository to assist with this located at &amp;lt;tt&amp;gt;build/deleted_file_check.php&amp;lt;/tt&amp;gt;. Running &amp;lt;tt&amp;gt;php build/deleted_file_check.php&amp;lt;/tt&amp;gt; with its required &amp;lt;tt&amp;gt;--from&amp;lt;/tt&amp;gt; option will write a file to &amp;lt;tt&amp;gt;build/deleted_files.txt&amp;lt;/tt&amp;gt; with the list of files deleted since the from reference. Please see the PHP file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
The following steps require the individual to create commits and tags. It is suggested that these commits and tags be GPG signed as an extra security step but this is not a mandatory requirement as of this writing.&lt;br /&gt;
&lt;br /&gt;
If creating a security release, at this point you should apply all patches provided by the security team.&lt;br /&gt;
&lt;br /&gt;
Once it is confirmed that the deleted files listing is correct, the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script should be executed to set the new version number. This script will also perform maintenance steps such as correcting the copyright year ranges for all files and replacing the &amp;lt;tt&amp;gt;__DEPLOY_VERSION__&amp;lt;/tt&amp;gt; placeholder. Please see the file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
After running this script, review all changes with &amp;lt;tt&amp;gt;git diff&amp;lt;/tt&amp;gt; as a final check before creating your release commit. Once you are satisfied that all changes are correct, commit your changes locally. Once committed, create the release tag locally; all release tags should be the version number you are creating and should match the output of &amp;lt;tt&amp;gt;Joomla\CMS\Version::getShortVersion()&amp;lt;/tt&amp;gt; (so if you have created 3.9.0-beta2 then the tag should be named 3.9.0-beta2).&lt;br /&gt;
&lt;br /&gt;
Once the tag has been created, you will run the &amp;lt;tt&amp;gt;build/build.php&amp;lt;/tt&amp;gt; script to generate the release packages. To ensure a clean build is produced, the script makes an archive of the tag you are building using the &amp;lt;tt&amp;gt;git archive&amp;lt;/tt&amp;gt; command and extracts this to the &amp;lt;tt&amp;gt;build/tmp/&amp;lt;timestamp&amp;gt;&amp;lt;/tt&amp;gt; directory. Depending on the patch version number, the following packages will be created in the &amp;lt;tt&amp;gt;build/tmp/packages&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* 0: Full installation and upgrade packages&lt;br /&gt;
* 1: Full installation, upgrade packages, and patch packages for x.y.0 to x.y.1&lt;br /&gt;
* 2+: Full installation, upgrade packages, patch packages for x.y.0 to x.y.&amp;lt;new&amp;gt; and x.y.&amp;lt;new-1&amp;gt; to x.y.&amp;lt;new&amp;gt; (i.e. when creating 3.8.8 this will create a patch package suitable for all 3.8.x releases and an optimized patch package for 3.8.7 to 3.8.8)&lt;br /&gt;
&lt;br /&gt;
Additionally, the script will generate a &amp;lt;tt&amp;gt;build/tmp/checksums.txt&amp;lt;/tt&amp;gt; file with the checksums for all generated packages.&lt;br /&gt;
&lt;br /&gt;
After the packages are created, you should validate that you are able to install and update a site using the ZIP packages (as these are the most frequently used type and served by our update system).&lt;br /&gt;
&lt;br /&gt;
== Publishing a Release ==&lt;br /&gt;
=== Release Packages ===&lt;br /&gt;
Depending on the type of release being created, you will publish the release packages in different locations.&lt;br /&gt;
&lt;br /&gt;
==== Alpha, Beta, Release Candidate ====&lt;br /&gt;
The packages for these releases are uploaded to GitHub. When ready to publish, you should push the release tag you created to GitHub and use their interface to create a release from the tag and upload the packages. There is a text template used for the releases, generally you can copy a previous release&#039;s text and adjust it to the version you are publishing.&lt;br /&gt;
&lt;br /&gt;
==== Stable ====&lt;br /&gt;
The packages for stable releases are uploaded to multiple locations, this is in part driven by the fact that the Amazon Web Services (AWS) S3 region used by Joomla is blocked in some locations therefore download mirrors are available when necessary.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Downloads Portal =====&lt;br /&gt;
The canonical source for all stable releases is the [https://downloads.joomla.org/ Joomla! Downloads Portal]. The packages served from the site use Joomla&#039;s AWS account. You will need to log into the AWS console to upload the packages to S3 under the &amp;lt;tt&amp;gt;joomla-official-downloads&amp;lt;/tt&amp;gt; bucket. The exact path inside the bucket is &amp;lt;tt&amp;gt;joomladownloads/joomla&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; where &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; is the major version number (i.e. &amp;lt;tt&amp;gt;joomla3&amp;lt;/tt&amp;gt;), note for compatibility with Akeeba Release System folders for each individual release are not used.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Update Server =====&lt;br /&gt;
The Joomla! Update Server is used as a mirror for the download packages. After connecting to the server, you should create a new folder at &amp;lt;tt&amp;gt;www/releases/&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; (i.e. &amp;lt;tt&amp;gt;www/releases/3.9.1&amp;lt;/tt&amp;gt; for the 3.9.1 release) and upload the packages here.&lt;br /&gt;
&lt;br /&gt;
===== GitHub =====&lt;br /&gt;
The packages are also uploaded to GitHub. This is similar to the steps for alpha, beta, and release candidate releases above. Note that you only need to push the release tag at this point (i.e. &amp;lt;tt&amp;gt;git push --tags&amp;lt;/tt&amp;gt;), you can wait to push the updated release branch until after the release is available.&lt;br /&gt;
&lt;br /&gt;
=== Announcements ===&lt;br /&gt;
==== joomla.org ====&lt;br /&gt;
For all stable releases, the main release announcement is published to the &amp;lt;tt&amp;gt;Joomla! Official News &amp;gt; Project Release News&amp;lt;/tt&amp;gt; category on the main &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; website.&lt;br /&gt;
&lt;br /&gt;
For a minor release, an updated version of the landing page at &amp;lt;tt&amp;gt;joomla.org/3&amp;lt;/tt&amp;gt; is published. Generally, this site is backed up from the sandbox location and transferred to the live domain shortly before release, this transfer should be coordinated with the [https://volunteers.joomla.org/teams/webmasters-team Webmasters Team].&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
For security releases, all accompanying articles are published to the &amp;lt;tt&amp;gt;News &amp;gt; Security Centre&amp;lt;/tt&amp;gt; category on the Joomla! Developer Network. As these articles are referenced from the main release announcement, these should be published at the same time.&lt;br /&gt;
&lt;br /&gt;
== Update Server ==&lt;br /&gt;
The update server must be updated to alert websites that a core update is available, this subdomain is managed on GitHub at https://github.com/joomla/update.joomla.org. Prior to each release, a pull request should be prepared with necessary changes for the release (generally this updates the version number, announcement URL, package URLs, and package checksums for the stable release and updating the version number for the nightly builds), see https://github.com/joomla/update.joomla.org/pull/117 as an example of this update for the 3.9.1 release. Pushes to the &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch of this repo are automatically deployed thanks to a Jenkins job, notifications for many of the Jenkins jobs are sent to the &amp;lt;tt&amp;gt;.org Build Notifications&amp;lt;/tt&amp;gt; channel on RingCentral Glip so you should ensure a success notification was sent here otherwise check if there was an issue with the job and/or manually deploy the updated files.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;update.joomla.org&amp;lt;/tt&amp;gt; subdomain is behind a CDN and it generally takes 5-10 minutes for all nodes to update, if need be you can access &amp;lt;tt&amp;gt;update1.joomla.org&amp;lt;/tt&amp;gt; to verify the right files are deployed without using the CDN.&lt;br /&gt;
&lt;br /&gt;
== Post Release Actions ==&lt;br /&gt;
Once the release is published, there are several additional tasks that should be completed shortly after.&lt;br /&gt;
&lt;br /&gt;
=== Post-Release Version Bump ===&lt;br /&gt;
The version should be bumped to the next version scheduled for release using the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script (i.e. after the 3.9.1 release this would be bumped to 3.9.2-dev).&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
After incrementing the version number, you should merge all the release changes forward to other active branches (especially in the case of a security release). Ensure you pay careful attention while resolving merge conflicts, when making a merge that includes a version bump generally all files which contain the version string and/or release date will be in conflict (as of this writing this is 8 files).&lt;br /&gt;
&lt;br /&gt;
=== Push Updated Branches ===&lt;br /&gt;
When ready, you should directly push your updates to the Git repo. If you elect to use pull requests, the pull requests should NEVER be squashed or rebased otherwise this will wipe out Git&#039;s awareness of the merged commits and will make your next branch merges even more complex. Likewise, as an example, if the commit preparing the 3.9.1 release and bumping the version string to 3.9.2-dev were squash merged as a pull request, then the commit that the 3.9.1 release was tagged from would not be in the repository.&lt;br /&gt;
&lt;br /&gt;
=== Update Release Milestones ===&lt;br /&gt;
On GitHub, all merged items are assigned to a milestone to help organize items. With each release, the [https://github.com/joomla/joomla-cms/milestones milestones] should be updated to ensure that the milestone for the release you created has been closed and a milestone for the next release is open.&lt;br /&gt;
&lt;br /&gt;
=== Website Updates ===&lt;br /&gt;
With all code updates pushed, there are several website updates that need to be triggered.&lt;br /&gt;
&lt;br /&gt;
==== api.joomla.org ====&lt;br /&gt;
With each release, an updated build of the API documentation should be deployed to the &amp;lt;tt&amp;gt;api.joomla.org&amp;lt;/tt&amp;gt; website. These updates are triggered with the &amp;lt;tt&amp;gt;Joomla! API &amp;gt; Deploy Docs - CMS&amp;lt;/tt&amp;gt; job on Jenkins. As this job relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed.&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
After a release, the &amp;lt;tt&amp;gt;Joomla! Project Roadmap&amp;lt;/tt&amp;gt; article in the &amp;lt;tt&amp;gt;Uncategorised&amp;lt;/tt&amp;gt; category should be updated to reflect the newly released version and updated links. The version whitelist for the statistics server should also be updated to allow the next version to be submitted; if you have not already, you should have a clone of the https://github.com/joomla/statistics-server repository on your local system. Once cloned and set up, run the &amp;lt;tt&amp;gt;bin/stats tags:joomla&amp;lt;/tt&amp;gt; command to regenerate the Joomla version whitelist. As this command relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed. The updated &amp;lt;tt&amp;gt;versions/joomla.json&amp;lt;/tt&amp;gt; should be committed and pushed, and a Jenkins job will deploy the updated site resources.&lt;br /&gt;
&lt;br /&gt;
== Additional Considerations ==&lt;br /&gt;
The release manager or a delegate is suggested to be in communication with the Webmasters Team to ensure the &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; websites are updated in a timely manner. When a security release is scheduled, it is encouraged to share the update release package with the team so that our sites may be updated before the fix is made public to mitigate the chance of the vulnerability being used to exploit one of our sites.&lt;br /&gt;
&lt;br /&gt;
= Framework Release Cycle =&lt;br /&gt;
The packages of the Joomla Framework are on an independent lifecycle meaning each package can be updated and released independently of all others. Generally the only restriction is with major releases, which should coincide with the CMS release cycle (i.e. CMS 3.x uses Framework 1.x, CMS 4.x will use Framework 2.x therefore Framework 2.0 stable releases should not be made until the CMS is in its beta phase at the earliest).&lt;br /&gt;
&lt;br /&gt;
== Tagging a Release ==&lt;br /&gt;
Most packages can be tagged and released through the &amp;lt;tt&amp;gt;Joomla! Framework &amp;gt; Package Release&amp;lt;/tt&amp;gt; job on Jenkins, however as of this writing this job only supports tagging releases from a repository&#039;s &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch. To tag a release, select the package you wish to update and specify the version you are releasing in the job&#039;s parameters and run the job; all releases should follow Semantic Versioning to set the correct number.&lt;br /&gt;
&lt;br /&gt;
Once the job has completed, you should verify the new release is visible on [https://packagist.org/packages/joomla/ Packagist]. Within a day, the new update should be visible on the [https://framework.joomla.org/status Joomla Framework Status page] (the database is updated via cron job reading from Packagist&#039;s API), if the updated version isn&#039;t seen on the site in a relatively timely manner you should clone the website locally and debug the &amp;lt;tt&amp;gt;packagist:sync:releases&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
== Security Releases ==&lt;br /&gt;
When a security release is created, a pull request should be sent to the [https://github.com/FriendsOfPHP/security-advisories FriendsOfPHP/security-advisories repository] with relevant details. This repository is used by many tools in the PHP and Composer ecosystem to alert users of security issues. https://github.com/FriendsOfPHP/security-advisories/pull/134 is an example of this pull request.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584511</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584511"/>
		<updated>2018-12-18T02:47:27Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general checklist for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;This document is a work in progress.&#039;&#039; The information on this page is currently undergoing a major revision.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
= CMS Release Cycle =&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums], in close coordination with the [https://volunteers.joomla.org/teams/bug-squad Bug Squad] and [https://volunteers.joomla.org/teams/cms-release-team CMS Release Team], should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 3.9.1 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt;: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next major release (the branch&#039;s name will always be the version it represents)&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that staging is merged to the next minor branch and the next minor branch is merged to the next major branch):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt; should be merged into &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
== Preparing To Release ==&lt;br /&gt;
When scheduling and preparing a release, the timeline should be communicated with the Production and Marketing &amp;amp; Communication Department leadership so that all teams are prepared to support the release. Note that when scheduling releases, consideration should be given to holidays around the world and the impact of issuing a release near those periods considered. Helpful resources include http://interfaith-calendar.org/ and https://www.timeanddate.com/holidays/&lt;br /&gt;
&lt;br /&gt;
=== Review Release Milestone and Release Blockers ===&lt;br /&gt;
On GitHub, check the [https://github.com/joomla/joomla-cms/milestones milestone] milestone for the release you are preparing to create and for any open items with the [https://github.com/joomla/joomla-cms/labels/release-blocker release-blocker] label. If there are remaining open items, review them to determine if they are items that should be included in the release or if they can be rescheduled to a later release.&lt;br /&gt;
&lt;br /&gt;
=== Release Schedule ===&lt;br /&gt;
==== Minor Release ====&lt;br /&gt;
Given the nature of a minor release, the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* Six weeks prior to planned stable release: Tag the first Beta release&lt;br /&gt;
** At this point the release should be considered feature complete and new features should be deferred to the next minor release&lt;br /&gt;
* Weekly Beta releases should follow this until the Release Candidate&lt;br /&gt;
* Two weeks prior to planned stable release: Tag the Release Candidate&lt;br /&gt;
** At this point the release branch (generally &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt;) should remain closed for committing except for high priority bug fixes and language updates&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* One week prior to planned stable release: If necessary, create a second Release Candidate&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
==== Maintenance Release ====&lt;br /&gt;
Maintenance releases operate on a 4-6 week cycle and the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* 4-5 days before planned release date: Tag a Release Candidate&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
=== Reviewing Release Changes ===&lt;br /&gt;
Before tagging a release, the list of changes in the release should be reviewed by the release manager and/or leadership team. The list of changes can be found using GitHub&#039;s compare function with the URL &amp;lt;tt&amp;gt;https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...staging&amp;lt;/tt&amp;gt; which will compare the changes from &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; to the current staging branch (for example, https://github.com/joomla/joomla-cms/compare/3.9.0...3.9.1-rc is the comparison from the 3.9.0 release tag to the 3.9.1-rc tag). Key purposes of this review include:&lt;br /&gt;
&lt;br /&gt;
* Ensuring all patches are compliant with Semantic Versioning (SemVer) (i.e. no backward compatibility breaks in minor or maintenance releases and no features in maintenance releases); SemVer violations should be cleared with the Production Department leadership&lt;br /&gt;
* Ensuring all code revisions are compatible with Joomla&#039;s minimum supported versions (i.e. no PHP 5.4 syntax in 3.x releases where PHP 5.3 is the minimum supported version, exceptions may be made if introducing a code path and files that will only be executed on newer PHP versions)&lt;br /&gt;
** Joomla&#039;s testing integrations should not be relied on in full for this as there are large portions of the Joomla code base which do not have automated test coverage, and as of this writing, there is not a code linting process in place checking for potential issues&lt;br /&gt;
* Ensuring features and &amp;quot;significant&amp;quot; changes are documented&lt;br /&gt;
&lt;br /&gt;
=== Security Fixes ===&lt;br /&gt;
From time to time, security fixes must be included in a release. Prior to every release, the release manager should check with the [https://volunteers.joomla.org/teams/security-strike-team Security Strike Team] to determine if security fixes are required, and if so ensure this is communicated to all members involved with release work (i.e. the marketing team liaison who assists with the publication of release related material). When a security release is necessary, an internal Release Candidate should be built for testing by the Security Strike Team, CMS Release Team, and [https://volunteers.joomla.org/teams/cms-maintenance-team CMS Maintenance Team] with all security patches included. These teams should also receive information about the vulnerabilities being addressed to ensure there are no regressions in the impacted areas.&lt;br /&gt;
&lt;br /&gt;
Note, when a security fix involves a Joomla Framework package, the Framework package should be patched first and a release created of the affected package then the CMS updated with &amp;lt;tt&amp;gt;composer update&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Building a Release ==&lt;br /&gt;
Building a release starts with checking that any files and folders that have been deleted are included in the arrays in the installer script at &amp;lt;tt&amp;gt;administrator/components/com_admin/script.php&amp;lt;/tt&amp;gt;. There is a helper script in the repository to assist with this located at &amp;lt;tt&amp;gt;build/deleted_file_check.php&amp;lt;/tt&amp;gt;. Running &amp;lt;tt&amp;gt;php build/deleted_file_check.php&amp;lt;/tt&amp;gt; with its required &amp;lt;tt&amp;gt;--from&amp;lt;/tt&amp;gt; option will write a file to &amp;lt;tt&amp;gt;build/deleted_files.txt&amp;lt;/tt&amp;gt; with the list of files deleted since the from reference. Please see the PHP file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
The following steps require the individual to create commits and tags. It is suggested that these commits and tags be GPG signed as an extra security step but this is not a mandatory requirement as of this writing.&lt;br /&gt;
&lt;br /&gt;
If creating a security release, at this point you should apply all patches provided by the security team.&lt;br /&gt;
&lt;br /&gt;
Once it is confirmed that the deleted files listing is correct, the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script should be executed to set the new version number. This script will also perform maintenance steps such as correcting the copyright year ranges for all files and replacing the &amp;lt;tt&amp;gt;__DEPLOY_VERSION__&amp;lt;/tt&amp;gt; placeholder. Please see the file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
After running this script, review all changes with &amp;lt;tt&amp;gt;git diff&amp;lt;/tt&amp;gt; as a final check before creating your release commit. Once you are satisfied that all changes are correct, commit your changes locally. Once committed, create the release tag locally; all release tags should be the version number you are creating and should match the output of &amp;lt;tt&amp;gt;Joomla\CMS\Version::getShortVersion()&amp;lt;/tt&amp;gt; (so if you have created 3.9.0-beta2 then the tag should be named 3.9.0-beta2).&lt;br /&gt;
&lt;br /&gt;
Once the tag has been created, you will run the &amp;lt;tt&amp;gt;build/build.php&amp;lt;/tt&amp;gt; script to generate the release packages. To ensure a clean build is produced, the script makes an archive of the tag you are building using the &amp;lt;tt&amp;gt;git archive&amp;lt;/tt&amp;gt; command and extracts this to the &amp;lt;tt&amp;gt;build/tmp/&amp;lt;timestamp&amp;gt;&amp;lt;/tt&amp;gt; directory. Depending on the patch version number, the following packages will be created in the &amp;lt;tt&amp;gt;build/tmp/packages&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* 0: Full installation and upgrade packages&lt;br /&gt;
* 1: Full installation, upgrade packages, and patch packages for x.y.0 to x.y.1&lt;br /&gt;
* 2+: Full installation, upgrade packages, patch packages for x.y.0 to x.y.&amp;lt;new&amp;gt; and x.y.&amp;lt;new-1&amp;gt; to x.y.&amp;lt;new&amp;gt; (i.e. when creating 3.8.8 this will create a patch package suitable for all 3.8.x releases and an optimized patch package for 3.8.7 to 3.8.8)&lt;br /&gt;
&lt;br /&gt;
Additionally, the script will generate a &amp;lt;tt&amp;gt;build/tmp/checksums.txt&amp;lt;/tt&amp;gt; file with the checksums for all generated packages.&lt;br /&gt;
&lt;br /&gt;
After the packages are created, you should validate that you are able to install and update a site using the ZIP packages (as these are the most frequently used type and served by our update system).&lt;br /&gt;
&lt;br /&gt;
== Publishing a Release ==&lt;br /&gt;
=== Release Packages ===&lt;br /&gt;
Depending on the type of release being created, you will publish the release packages in different locations.&lt;br /&gt;
&lt;br /&gt;
==== Alpha, Beta, Release Candidate ====&lt;br /&gt;
The packages for these releases are uploaded to GitHub. When ready to publish, you should push the release tag you created to GitHub and use their interface to create a release from the tag and upload the packages. There is a text template used for the releases, generally you can copy a previous release&#039;s text and adjust it to the version you are publishing.&lt;br /&gt;
&lt;br /&gt;
==== Stable ====&lt;br /&gt;
The packages for stable releases are uploaded to multiple locations, this is in part driven by the fact that the Amazon Web Services (AWS) S3 region used by Joomla is blocked in some locations therefore download mirrors are available when necessary.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Downloads Portal =====&lt;br /&gt;
The canonical source for all stable releases is the [https://downloads.joomla.org/ Joomla! Downloads Portal]. The packages served from the site use Joomla&#039;s AWS account. You will need to log into the AWS console to upload the packages to S3 under the &amp;lt;tt&amp;gt;joomla-official-downloads&amp;lt;/tt&amp;gt; bucket. The exact path inside the bucket is &amp;lt;tt&amp;gt;joomladownloads/joomla&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; where &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; is the major version number (i.e. &amp;lt;tt&amp;gt;joomla3&amp;lt;/tt&amp;gt;), note for compatibility with Akeeba Release System folders for each individual release are not used.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Update Server =====&lt;br /&gt;
The Joomla! Update Server is used as a mirror for the download packages. After connecting to the server, you should create a new folder at &amp;lt;tt&amp;gt;www/releases/&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; (i.e. &amp;lt;tt&amp;gt;www/releases/3.9.1&amp;lt;/tt&amp;gt; for the 3.9.1 release) and upload the packages here.&lt;br /&gt;
&lt;br /&gt;
===== GitHub =====&lt;br /&gt;
The packages are also uploaded to GitHub. This is similar to the steps for alpha, beta, and release candidate releases above. Note that you only need to push the release tag at this point (i.e. &amp;lt;tt&amp;gt;git push --tags&amp;lt;/tt&amp;gt;), you can wait to push the updated release branch until after the release is available.&lt;br /&gt;
&lt;br /&gt;
=== Announcements ===&lt;br /&gt;
==== joomla.org ====&lt;br /&gt;
For all stable releases, the main release announcement is published to the &amp;lt;tt&amp;gt;Joomla! Official News &amp;gt; Project Release News&amp;lt;/tt&amp;gt; category on the main &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; website.&lt;br /&gt;
&lt;br /&gt;
For a minor release, an updated version of the landing page at &amp;lt;tt&amp;gt;joomla.org/3&amp;lt;/tt&amp;gt; is published. Generally, this site is backed up from the sandbox location and transferred to the live domain shortly before release, this transfer should be coordinated with the [https://volunteers.joomla.org/teams/webmasters-team Webmasters Team].&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
For security releases, all accompanying articles are published to the &amp;lt;tt&amp;gt;News &amp;gt; Security Centre&amp;lt;/tt&amp;gt; category on the Joomla! Developer Network. As these articles are referenced from the main release announcement, these should be published at the same time.&lt;br /&gt;
&lt;br /&gt;
== Update Server ==&lt;br /&gt;
The update server must be updated to alert websites that a core update is available, this subdomain is managed on GitHub at https://github.com/joomla/update.joomla.org. Prior to each release, a pull request should be prepared with necessary changes for the release (generally this updates the version number, announcement URL, package URLs, and package checksums for the stable release and updating the version number for the nightly builds), see https://github.com/joomla/update.joomla.org/pull/117 as an example of this update for the 3.9.1 release. Pushes to the &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch of this repo are automatically deployed thanks to a Jenkins job, notifications for many of the Jenkins jobs are sent to the &amp;lt;tt&amp;gt;.org Build Notifications&amp;lt;/tt&amp;gt; channel on RingCentral Glip so you should ensure a success notification was sent here otherwise check if there was an issue with the job and/or manually deploy the updated files.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;update.joomla.org&amp;lt;/tt&amp;gt; subdomain is behind a CDN and it generally takes 5-10 minutes for all nodes to update, if need be you can access &amp;lt;tt&amp;gt;update1.joomla.org&amp;lt;/tt&amp;gt; to verify the right files are deployed without using the CDN.&lt;br /&gt;
&lt;br /&gt;
== Post Release Actions ==&lt;br /&gt;
Once the release is published, there are several additional tasks that should be completed shortly after.&lt;br /&gt;
&lt;br /&gt;
=== Post-Release Version Bump ===&lt;br /&gt;
The version should be bumped to the next version scheduled for release using the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script (i.e. after the 3.9.1 release this would be bumped to 3.9.2-dev).&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
After incrementing the version number, you should merge all the release changes forward to other active branches (especially in the case of a security release). Ensure you pay careful attention while resolving merge conflicts, when making a merge that includes a version bump generally all files which contain the version string and/or release date will be in conflict (as of this writing this is 8 files).&lt;br /&gt;
&lt;br /&gt;
=== Push Updated Branches ===&lt;br /&gt;
When ready, you should directly push your updates to the Git repo. If you elect to use pull requests, the pull requests should NEVER be squashed or rebased otherwise this will wipe out Git&#039;s awareness of the merged commits and will make your next branch merges even more complex. Likewise, as an example, if the commit preparing the 3.9.1 release and bumping the version string to 3.9.2-dev were squash merged as a pull request, then the commit that the 3.9.1 release was tagged from would not be in the repository.&lt;br /&gt;
&lt;br /&gt;
=== Update Release Milestones ===&lt;br /&gt;
On GitHub, all merged items are assigned to a milestone to help organize items. With each release, the [https://github.com/joomla/joomla-cms/milestones milestones] should be updated to ensure that the milestone for the release you created has been closed and a milestone for the next release is open.&lt;br /&gt;
&lt;br /&gt;
=== Website Updates ===&lt;br /&gt;
With all code updates pushed, there are several website updates that need to be triggered.&lt;br /&gt;
&lt;br /&gt;
==== api.joomla.org ====&lt;br /&gt;
With each release, an updated build of the API documentation should be deployed to the &amp;lt;tt&amp;gt;api.joomla.org&amp;lt;/tt&amp;gt; website. These updates are triggered with the &amp;lt;tt&amp;gt;Joomla! API &amp;gt; Deploy Docs - CMS&amp;lt;/tt&amp;gt; job on Jenkins. As this job relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed.&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
After a release, the &amp;lt;tt&amp;gt;Joomla! Project Roadmap&amp;lt;/tt&amp;gt; article in the &amp;lt;tt&amp;gt;Uncategorised&amp;lt;/tt&amp;gt; category should be updated to reflect the newly released version and updated links. The version whitelist for the statistics server should also be updated to allow the next version to be submitted; if you have not already, you should have a clone of the https://github.com/joomla/statistics-server repository on your local system. Once cloned and set up, run the &amp;lt;tt&amp;gt;bin/stats tags:joomla&amp;lt;/tt&amp;gt; command to regenerate the Joomla version whitelist. As this command relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed. The updated &amp;lt;tt&amp;gt;versions/joomla.json&amp;lt;/tt&amp;gt; should be committed and pushed, and a Jenkins job will deploy the updated site resources.&lt;br /&gt;
&lt;br /&gt;
== Additional Considerations ==&lt;br /&gt;
The release manager or a delegate is suggested to be in communication with the Webmasters Team to ensure the &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; websites are updated in a timely manner. When a security release is scheduled, it is encouraged to share the update release package with the team so that our sites may be updated before the fix is made public to mitigate the chance of the vulnerability being used to exploit one of our sites.&lt;br /&gt;
&lt;br /&gt;
= Framework Release Cycle =&lt;br /&gt;
The packages of the Joomla Framework are on an independent lifecycle meaning each package can be updated and released independently of all others. Generally the only restriction is with major releases, which should coincide with the CMS release cycle (i.e. CMS 3.x uses Framework 1.x, CMS 4.x will use Framework 2.x therefore Framework 2.0 stable releases should not be made until the CMS is in its beta phase at the earliest).&lt;br /&gt;
&lt;br /&gt;
== Tagging a Release ==&lt;br /&gt;
Most packages can be tagged and released through the &amp;lt;tt&amp;gt;Joomla! Framework &amp;gt; Package Release&amp;lt;/tt&amp;gt; job on Jenkins, however as of this writing this job only supports tagging releases from a repository&#039;s &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch. To tag a release, select the package you wish to update and specify the version you are releasing in the job&#039;s parameters and run the job; all releases should follow Semantic Versioning to set the correct number.&lt;br /&gt;
&lt;br /&gt;
Once the job has completed, you should verify the new release is visible on [https://packagist.org/packages/joomla/ Packagist]. Within a day, the new update should be visible on the [https://framework.joomla.org/status Joomla Framework Status page] (the database is updated via cron job reading from Packagist&#039;s API), if the updated version isn&#039;t seen on the site in a relatively timely manner you should clone the website locally and debug the &amp;lt;tt&amp;gt;packagist:sync:releases&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
== Security Releases ==&lt;br /&gt;
When a security release is created, a pull request should be sent to the [https://github.com/FriendsOfPHP/security-advisories FriendsOfPHP/security-advisories repository] with relevant details. This repository is used by many tools in the PHP and Composer ecosystem to alert users of security issues. https://github.com/FriendsOfPHP/security-advisories/pull/134 is an example of this pull request.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584510</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584510"/>
		<updated>2018-12-18T02:38:49Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general checklist for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;This document is a work in progress.&#039;&#039; The information on this page is currently undergoing a major revision.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
= CMS Release Cycle =&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums], in close coordination with the [https://volunteers.joomla.org/teams/bug-squad Bug Squad] and [https://volunteers.joomla.org/teams/cms-release-team CMS Release Team], should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 3.9.1 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt;: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next major release (the branch&#039;s name will always be the version it represents)&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that staging is merged to the next minor branch and the next minor branch is merged to the next major branch):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt; should be merged into &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
== Preparing To Release ==&lt;br /&gt;
When scheduling and preparing a release, the timeline should be communicated with the Production and Marketing &amp;amp; Communication Department leadership so that all teams are prepared to support the release. Note that when scheduling releases, consideration should be given to holidays around the world and the impact of issuing a release near those periods considered. Helpful resources include http://interfaith-calendar.org/ and https://www.timeanddate.com/holidays/&lt;br /&gt;
&lt;br /&gt;
=== Release Schedule ===&lt;br /&gt;
==== Minor Release ====&lt;br /&gt;
Given the nature of a minor release, the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* Six weeks prior to planned stable release: Tag the first Beta release&lt;br /&gt;
** At this point the release should be considered feature complete and new features should be deferred to the next minor release&lt;br /&gt;
* Weekly Beta releases should follow this until the Release Candidate&lt;br /&gt;
* Two weeks prior to planned stable release: Tag the Release Candidate&lt;br /&gt;
** At this point the release branch (generally &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt;) should remain closed for committing except for high priority bug fixes and language updates&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* One week prior to planned stable release: If necessary, create a second Release Candidate&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
==== Maintenance Release ====&lt;br /&gt;
Maintenance releases operate on a 4-6 week cycle and the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* 4-5 days before planned release date: Tag a Release Candidate&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
=== Reviewing Release Changes ===&lt;br /&gt;
Before tagging a release, the list of changes in the release should be reviewed by the release manager and/or leadership team. The list of changes can be found using GitHub&#039;s compare function with the URL &amp;lt;tt&amp;gt;https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...staging&amp;lt;/tt&amp;gt; which will compare the changes from &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; to the current staging branch (for example, https://github.com/joomla/joomla-cms/compare/3.9.0...3.9.1-rc is the comparison from the 3.9.0 release tag to the 3.9.1-rc tag). Key purposes of this review include:&lt;br /&gt;
&lt;br /&gt;
* Ensuring all patches are compliant with Semantic Versioning (SemVer) (i.e. no backward compatibility breaks in minor or maintenance releases and no features in maintenance releases); SemVer violations should be cleared with the Production Department leadership&lt;br /&gt;
* Ensuring all code revisions are compatible with Joomla&#039;s minimum supported versions (i.e. no PHP 5.4 syntax in 3.x releases where PHP 5.3 is the minimum supported version, exceptions may be made if introducing a code path and files that will only be executed on newer PHP versions)&lt;br /&gt;
** Joomla&#039;s testing integrations should not be relied on in full for this as there are large portions of the Joomla code base which do not have automated test coverage, and as of this writing, there is not a code linting process in place checking for potential issues&lt;br /&gt;
* Ensuring features and &amp;quot;significant&amp;quot; changes are documented&lt;br /&gt;
&lt;br /&gt;
=== Security Fixes ===&lt;br /&gt;
From time to time, security fixes must be included in a release. Prior to every release, the release manager should check with the [https://volunteers.joomla.org/teams/security-strike-team Security Strike Team] to determine if security fixes are required, and if so ensure this is communicated to all members involved with release work (i.e. the marketing team liaison who assists with the publication of release related material). When a security release is necessary, an internal Release Candidate should be built for testing by the Security Strike Team, CMS Release Team, and [https://volunteers.joomla.org/teams/cms-maintenance-team CMS Maintenance Team] with all security patches included. These teams should also receive information about the vulnerabilities being addressed to ensure there are no regressions in the impacted areas.&lt;br /&gt;
&lt;br /&gt;
Note, when a security fix involves a Joomla Framework package, the Framework package should be patched first and a release created of the affected package then the CMS updated with &amp;lt;tt&amp;gt;composer update&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Building a Release ==&lt;br /&gt;
Building a release starts with checking that any files and folders that have been deleted are included in the arrays in the installer script at &amp;lt;tt&amp;gt;administrator/components/com_admin/script.php&amp;lt;/tt&amp;gt;. There is a helper script in the repository to assist with this located at &amp;lt;tt&amp;gt;build/deleted_file_check.php&amp;lt;/tt&amp;gt;. Running &amp;lt;tt&amp;gt;php build/deleted_file_check.php&amp;lt;/tt&amp;gt; with its required &amp;lt;tt&amp;gt;--from&amp;lt;/tt&amp;gt; option will write a file to &amp;lt;tt&amp;gt;build/deleted_files.txt&amp;lt;/tt&amp;gt; with the list of files deleted since the from reference. Please see the PHP file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
The following steps require the individual to create commits and tags. It is suggested that these commits and tags be GPG signed as an extra security step but this is not a mandatory requirement as of this writing.&lt;br /&gt;
&lt;br /&gt;
If creating a security release, at this point you should apply all patches provided by the security team.&lt;br /&gt;
&lt;br /&gt;
Once it is confirmed that the deleted files listing is correct, the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script should be executed to set the new version number. This script will also perform maintenance steps such as correcting the copyright year ranges for all files and replacing the &amp;lt;tt&amp;gt;__DEPLOY_VERSION__&amp;lt;/tt&amp;gt; placeholder. Please see the file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
After running this script, review all changes with &amp;lt;tt&amp;gt;git diff&amp;lt;/tt&amp;gt; as a final check before creating your release commit. Once you are satisfied that all changes are correct, commit your changes locally. Once committed, create the release tag locally; all release tags should be the version number you are creating and should match the output of &amp;lt;tt&amp;gt;Joomla\CMS\Version::getShortVersion()&amp;lt;/tt&amp;gt; (so if you have created 3.9.0-beta2 then the tag should be named 3.9.0-beta2).&lt;br /&gt;
&lt;br /&gt;
Once the tag has been created, you will run the &amp;lt;tt&amp;gt;build/build.php&amp;lt;/tt&amp;gt; script to generate the release packages. To ensure a clean build is produced, the script makes an archive of the tag you are building using the &amp;lt;tt&amp;gt;git archive&amp;lt;/tt&amp;gt; command and extracts this to the &amp;lt;tt&amp;gt;build/tmp/&amp;lt;timestamp&amp;gt;&amp;lt;/tt&amp;gt; directory. Depending on the patch version number, the following packages will be created in the &amp;lt;tt&amp;gt;build/tmp/packages&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* 0: Full installation and upgrade packages&lt;br /&gt;
* 1: Full installation, upgrade packages, and patch packages for x.y.0 to x.y.1&lt;br /&gt;
* 2+: Full installation, upgrade packages, patch packages for x.y.0 to x.y.&amp;lt;new&amp;gt; and x.y.&amp;lt;new-1&amp;gt; to x.y.&amp;lt;new&amp;gt; (i.e. when creating 3.8.8 this will create a patch package suitable for all 3.8.x releases and an optimized patch package for 3.8.7 to 3.8.8)&lt;br /&gt;
&lt;br /&gt;
Additionally, the script will generate a &amp;lt;tt&amp;gt;build/tmp/checksums.txt&amp;lt;/tt&amp;gt; file with the checksums for all generated packages.&lt;br /&gt;
&lt;br /&gt;
After the packages are created, you should validate that you are able to install and update a site using the ZIP packages (as these are the most frequently used type and served by our update system).&lt;br /&gt;
&lt;br /&gt;
== Publishing a Release ==&lt;br /&gt;
=== Release Packages ===&lt;br /&gt;
Depending on the type of release being created, you will publish the release packages in different locations.&lt;br /&gt;
&lt;br /&gt;
==== Alpha, Beta, Release Candidate ====&lt;br /&gt;
The packages for these releases are uploaded to GitHub. When ready to publish, you should push the release tag you created to GitHub and use their interface to create a release from the tag and upload the packages. There is a text template used for the releases, generally you can copy a previous release&#039;s text and adjust it to the version you are publishing.&lt;br /&gt;
&lt;br /&gt;
==== Stable ====&lt;br /&gt;
The packages for stable releases are uploaded to multiple locations, this is in part driven by the fact that the Amazon Web Services (AWS) S3 region used by Joomla is blocked in some locations therefore download mirrors are available when necessary.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Downloads Portal =====&lt;br /&gt;
The canonical source for all stable releases is the [https://downloads.joomla.org/ Joomla! Downloads Portal]. The packages served from the site use Joomla&#039;s AWS account. You will need to log into the AWS console to upload the packages to S3 under the &amp;lt;tt&amp;gt;joomla-official-downloads&amp;lt;/tt&amp;gt; bucket. The exact path inside the bucket is &amp;lt;tt&amp;gt;joomladownloads/joomla&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; where &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; is the major version number (i.e. &amp;lt;tt&amp;gt;joomla3&amp;lt;/tt&amp;gt;), note for compatibility with Akeeba Release System folders for each individual release are not used.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Update Server =====&lt;br /&gt;
The Joomla! Update Server is used as a mirror for the download packages. After connecting to the server, you should create a new folder at &amp;lt;tt&amp;gt;www/releases/&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; (i.e. &amp;lt;tt&amp;gt;www/releases/3.9.1&amp;lt;/tt&amp;gt; for the 3.9.1 release) and upload the packages here.&lt;br /&gt;
&lt;br /&gt;
===== GitHub =====&lt;br /&gt;
The packages are also uploaded to GitHub. This is similar to the steps for alpha, beta, and release candidate releases above. Note that you only need to push the release tag at this point (i.e. &amp;lt;tt&amp;gt;git push --tags&amp;lt;/tt&amp;gt;), you can wait to push the updated release branch until after the release is available.&lt;br /&gt;
&lt;br /&gt;
=== Announcements ===&lt;br /&gt;
==== joomla.org ====&lt;br /&gt;
For all stable releases, the main release announcement is published to the &amp;lt;tt&amp;gt;Joomla! Official News &amp;gt; Project Release News&amp;lt;/tt&amp;gt; category on the main &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; website.&lt;br /&gt;
&lt;br /&gt;
For a minor release, an updated version of the landing page at &amp;lt;tt&amp;gt;joomla.org/3&amp;lt;/tt&amp;gt; is published. Generally, this site is backed up from the sandbox location and transferred to the live domain shortly before release, this transfer should be coordinated with the [https://volunteers.joomla.org/teams/webmasters-team Webmasters Team].&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
For security releases, all accompanying articles are published to the &amp;lt;tt&amp;gt;News &amp;gt; Security Centre&amp;lt;/tt&amp;gt; category on the Joomla! Developer Network. As these articles are referenced from the main release announcement, these should be published at the same time.&lt;br /&gt;
&lt;br /&gt;
== Update Server ==&lt;br /&gt;
The update server must be updated to alert websites that a core update is available, this subdomain is managed on GitHub at https://github.com/joomla/update.joomla.org. Prior to each release, a pull request should be prepared with necessary changes for the release (generally this updates the version number, announcement URL, package URLs, and package checksums for the stable release and updating the version number for the nightly builds), see https://github.com/joomla/update.joomla.org/pull/117 as an example of this update for the 3.9.1 release. Pushes to the &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch of this repo are automatically deployed thanks to a Jenkins job, notifications for many of the Jenkins jobs are sent to the &amp;lt;tt&amp;gt;.org Build Notifications&amp;lt;/tt&amp;gt; channel on RingCentral Glip so you should ensure a success notification was sent here otherwise check if there was an issue with the job and/or manually deploy the updated files.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;update.joomla.org&amp;lt;/tt&amp;gt; subdomain is behind a CDN and it generally takes 5-10 minutes for all nodes to update, if need be you can access &amp;lt;tt&amp;gt;update1.joomla.org&amp;lt;/tt&amp;gt; to verify the right files are deployed without using the CDN.&lt;br /&gt;
&lt;br /&gt;
== Post Release Actions ==&lt;br /&gt;
Once the release is published, there are several additional tasks that should be completed shortly after.&lt;br /&gt;
&lt;br /&gt;
=== Post-Release Version Bump ===&lt;br /&gt;
The version should be bumped to the next version scheduled for release using the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script (i.e. after the 3.9.1 release this would be bumped to 3.9.2-dev).&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
After incrementing the version number, you should merge all the release changes forward to other active branches (especially in the case of a security release). Ensure you pay careful attention while resolving merge conflicts, when making a merge that includes a version bump generally all files which contain the version string and/or release date will be in conflict (as of this writing this is 8 files).&lt;br /&gt;
&lt;br /&gt;
=== Push Updated Branches ===&lt;br /&gt;
When ready, you should directly push your updates to the Git repo. If you elect to use pull requests, the pull requests should NEVER be squashed or rebased otherwise this will wipe out Git&#039;s awareness of the merged commits and will make your next branch merges even more complex. Likewise, as an example, if the commit preparing the 3.9.1 release and bumping the version string to 3.9.2-dev were squash merged as a pull request, then the commit that the 3.9.1 release was tagged from would not be in the repository.&lt;br /&gt;
&lt;br /&gt;
=== Website Updates ===&lt;br /&gt;
With all code updates pushed, there are several website updates that need to be triggered.&lt;br /&gt;
&lt;br /&gt;
==== api.joomla.org ====&lt;br /&gt;
With each release, an updated build of the API documentation should be deployed to the &amp;lt;tt&amp;gt;api.joomla.org&amp;lt;/tt&amp;gt; website. These updates are triggered with the &amp;lt;tt&amp;gt;Joomla! API &amp;gt; Deploy Docs - CMS&amp;lt;/tt&amp;gt; job on Jenkins. As this job relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed.&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
After a release, the &amp;lt;tt&amp;gt;Joomla! Project Roadmap&amp;lt;/tt&amp;gt; article in the &amp;lt;tt&amp;gt;Uncategorised&amp;lt;/tt&amp;gt; category should be updated to reflect the newly released version and updated links. The version whitelist for the statistics server should also be updated to allow the next version to be submitted; if you have not already, you should have a clone of the https://github.com/joomla/statistics-server repository on your local system. Once cloned and set up, run the &amp;lt;tt&amp;gt;bin/stats tags:joomla&amp;lt;/tt&amp;gt; command to regenerate the Joomla version whitelist. As this command relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed. The updated &amp;lt;tt&amp;gt;versions/joomla.json&amp;lt;/tt&amp;gt; should be committed and pushed, and a Jenkins job will deploy the updated site resources.&lt;br /&gt;
&lt;br /&gt;
== Additional Considerations ==&lt;br /&gt;
The release manager or a delegate is suggested to be in communication with the Webmasters Team to ensure the &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; websites are updated in a timely manner. When a security release is scheduled, it is encouraged to share the update release package with the team so that our sites may be updated before the fix is made public to mitigate the chance of the vulnerability being used to exploit one of our sites.&lt;br /&gt;
&lt;br /&gt;
= Framework Release Cycle =&lt;br /&gt;
The packages of the Joomla Framework are on an independent lifecycle meaning each package can be updated and released independently of all others. Generally the only restriction is with major releases, which should coincide with the CMS release cycle (i.e. CMS 3.x uses Framework 1.x, CMS 4.x will use Framework 2.x therefore Framework 2.0 stable releases should not be made until the CMS is in its beta phase at the earliest).&lt;br /&gt;
&lt;br /&gt;
== Tagging a Release ==&lt;br /&gt;
Most packages can be tagged and released through the &amp;lt;tt&amp;gt;Joomla! Framework &amp;gt; Package Release&amp;lt;/tt&amp;gt; job on Jenkins, however as of this writing this job only supports tagging releases from a repository&#039;s &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch. To tag a release, select the package you wish to update and specify the version you are releasing in the job&#039;s parameters and run the job; all releases should follow Semantic Versioning to set the correct number.&lt;br /&gt;
&lt;br /&gt;
Once the job has completed, you should verify the new release is visible on [https://packagist.org/packages/joomla/ Packagist]. Within a day, the new update should be visible on the [https://framework.joomla.org/status Joomla Framework Status page] (the database is updated via cron job reading from Packagist&#039;s API), if the updated version isn&#039;t seen on the site in a relatively timely manner you should clone the website locally and debug the &amp;lt;tt&amp;gt;packagist:sync:releases&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
== Security Releases ==&lt;br /&gt;
When a security release is created, a pull request should be sent to the [https://github.com/FriendsOfPHP/security-advisories FriendsOfPHP/security-advisories repository] with relevant details. This repository is used by many tools in the PHP and Composer ecosystem to alert users of security issues. https://github.com/FriendsOfPHP/security-advisories/pull/134 is an example of this pull request.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584509</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584509"/>
		<updated>2018-12-18T02:36:13Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Framework releases&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general checklist for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;This document is a work in progress.&#039;&#039; The information on this page is currently undergoing a major revision, the previous version of this document is available below as a point of reference for these revisions.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
= CMS Release Cycle =&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums], in close coordination with the [https://volunteers.joomla.org/teams/bug-squad Bug Squad] and [https://volunteers.joomla.org/teams/cms-release-team CMS Release Team], should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 3.9.1 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt;: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next major release (the branch&#039;s name will always be the version it represents)&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that staging is merged to the next minor branch and the next minor branch is merged to the next major branch):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt; should be merged into &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
== Preparing To Release ==&lt;br /&gt;
When scheduling and preparing a release, the timeline should be communicated with the Production and Marketing &amp;amp; Communication Department leadership so that all teams are prepared to support the release. Note that when scheduling releases, consideration should be given to holidays around the world and the impact of issuing a release near those periods considered. Helpful resources include http://interfaith-calendar.org/ and https://www.timeanddate.com/holidays/&lt;br /&gt;
&lt;br /&gt;
=== Release Schedule ===&lt;br /&gt;
==== Minor Release ====&lt;br /&gt;
Given the nature of a minor release, the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* Six weeks prior to planned stable release: Tag the first Beta release&lt;br /&gt;
** At this point the release should be considered feature complete and new features should be deferred to the next minor release&lt;br /&gt;
* Weekly Beta releases should follow this until the Release Candidate&lt;br /&gt;
* Two weeks prior to planned stable release: Tag the Release Candidate&lt;br /&gt;
** At this point the release branch (generally &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt;) should remain closed for committing except for high priority bug fixes and language updates&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* One week prior to planned stable release: If necessary, create a second Release Candidate&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
==== Maintenance Release ====&lt;br /&gt;
Maintenance releases operate on a 4-6 week cycle and the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* 4-5 days before planned release date: Tag a Release Candidate&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
=== Reviewing Release Changes ===&lt;br /&gt;
Before tagging a release, the list of changes in the release should be reviewed by the release manager and/or leadership team. The list of changes can be found using GitHub&#039;s compare function with the URL &amp;lt;tt&amp;gt;https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...staging&amp;lt;/tt&amp;gt; which will compare the changes from &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; to the current staging branch (for example, https://github.com/joomla/joomla-cms/compare/3.9.0...3.9.1-rc is the comparison from the 3.9.0 release tag to the 3.9.1-rc tag). Key purposes of this review include:&lt;br /&gt;
&lt;br /&gt;
* Ensuring all patches are compliant with Semantic Versioning (SemVer) (i.e. no backward compatibility breaks in minor or maintenance releases and no features in maintenance releases); SemVer violations should be cleared with the Production Department leadership&lt;br /&gt;
* Ensuring all code revisions are compatible with Joomla&#039;s minimum supported versions (i.e. no PHP 5.4 syntax in 3.x releases where PHP 5.3 is the minimum supported version, exceptions may be made if introducing a code path and files that will only be executed on newer PHP versions)&lt;br /&gt;
** Joomla&#039;s testing integrations should not be relied on in full for this as there are large portions of the Joomla code base which do not have automated test coverage, and as of this writing, there is not a code linting process in place checking for potential issues&lt;br /&gt;
* Ensuring features and &amp;quot;significant&amp;quot; changes are documented&lt;br /&gt;
&lt;br /&gt;
=== Security Fixes ===&lt;br /&gt;
From time to time, security fixes must be included in a release. Prior to every release, the release manager should check with the [https://volunteers.joomla.org/teams/security-strike-team Security Strike Team] to determine if security fixes are required, and if so ensure this is communicated to all members involved with release work (i.e. the marketing team liaison who assists with the publication of release related material). When a security release is necessary, an internal Release Candidate should be built for testing by the Security Strike Team, CMS Release Team, and [https://volunteers.joomla.org/teams/cms-maintenance-team CMS Maintenance Team] with all security patches included. These teams should also receive information about the vulnerabilities being addressed to ensure there are no regressions in the impacted areas.&lt;br /&gt;
&lt;br /&gt;
Note, when a security fix involves a Joomla Framework package, the Framework package should be patched first and a release created of the affected package then the CMS updated with &amp;lt;tt&amp;gt;composer update&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Building a Release ==&lt;br /&gt;
Building a release starts with checking that any files and folders that have been deleted are included in the arrays in the installer script at &amp;lt;tt&amp;gt;administrator/components/com_admin/script.php&amp;lt;/tt&amp;gt;. There is a helper script in the repository to assist with this located at &amp;lt;tt&amp;gt;build/deleted_file_check.php&amp;lt;/tt&amp;gt;. Running &amp;lt;tt&amp;gt;php build/deleted_file_check.php&amp;lt;/tt&amp;gt; with its required &amp;lt;tt&amp;gt;--from&amp;lt;/tt&amp;gt; option will write a file to &amp;lt;tt&amp;gt;build/deleted_files.txt&amp;lt;/tt&amp;gt; with the list of files deleted since the from reference. Please see the PHP file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
The following steps require the individual to create commits and tags. It is suggested that these commits and tags be GPG signed as an extra security step but this is not a mandatory requirement as of this writing.&lt;br /&gt;
&lt;br /&gt;
If creating a security release, at this point you should apply all patches provided by the security team.&lt;br /&gt;
&lt;br /&gt;
Once it is confirmed that the deleted files listing is correct, the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script should be executed to set the new version number. This script will also perform maintenance steps such as correcting the copyright year ranges for all files and replacing the &amp;lt;tt&amp;gt;__DEPLOY_VERSION__&amp;lt;/tt&amp;gt; placeholder. Please see the file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
After running this script, review all changes with &amp;lt;tt&amp;gt;git diff&amp;lt;/tt&amp;gt; as a final check before creating your release commit. Once you are satisfied that all changes are correct, commit your changes locally. Once committed, create the release tag locally; all release tags should be the version number you are creating and should match the output of &amp;lt;tt&amp;gt;Joomla\CMS\Version::getShortVersion()&amp;lt;/tt&amp;gt; (so if you have created 3.9.0-beta2 then the tag should be named 3.9.0-beta2).&lt;br /&gt;
&lt;br /&gt;
Once the tag has been created, you will run the &amp;lt;tt&amp;gt;build/build.php&amp;lt;/tt&amp;gt; script to generate the release packages. To ensure a clean build is produced, the script makes an archive of the tag you are building using the &amp;lt;tt&amp;gt;git archive&amp;lt;/tt&amp;gt; command and extracts this to the &amp;lt;tt&amp;gt;build/tmp/&amp;lt;timestamp&amp;gt;&amp;lt;/tt&amp;gt; directory. Depending on the patch version number, the following packages will be created in the &amp;lt;tt&amp;gt;build/tmp/packages&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* 0: Full installation and upgrade packages&lt;br /&gt;
* 1: Full installation, upgrade packages, and patch packages for x.y.0 to x.y.1&lt;br /&gt;
* 2+: Full installation, upgrade packages, patch packages for x.y.0 to x.y.&amp;lt;new&amp;gt; and x.y.&amp;lt;new-1&amp;gt; to x.y.&amp;lt;new&amp;gt; (i.e. when creating 3.8.8 this will create a patch package suitable for all 3.8.x releases and an optimized patch package for 3.8.7 to 3.8.8)&lt;br /&gt;
&lt;br /&gt;
Additionally, the script will generate a &amp;lt;tt&amp;gt;build/tmp/checksums.txt&amp;lt;/tt&amp;gt; file with the checksums for all generated packages.&lt;br /&gt;
&lt;br /&gt;
After the packages are created, you should validate that you are able to install and update a site using the ZIP packages (as these are the most frequently used type and served by our update system).&lt;br /&gt;
&lt;br /&gt;
== Publishing a Release ==&lt;br /&gt;
=== Release Packages ===&lt;br /&gt;
Depending on the type of release being created, you will publish the release packages in different locations.&lt;br /&gt;
&lt;br /&gt;
==== Alpha, Beta, Release Candidate ====&lt;br /&gt;
The packages for these releases are uploaded to GitHub. When ready to publish, you should push the release tag you created to GitHub and use their interface to create a release from the tag and upload the packages. There is a text template used for the releases, generally you can copy a previous release&#039;s text and adjust it to the version you are publishing.&lt;br /&gt;
&lt;br /&gt;
==== Stable ====&lt;br /&gt;
The packages for stable releases are uploaded to multiple locations, this is in part driven by the fact that the Amazon Web Services (AWS) S3 region used by Joomla is blocked in some locations therefore download mirrors are available when necessary.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Downloads Portal =====&lt;br /&gt;
The canonical source for all stable releases is the [https://downloads.joomla.org/ Joomla! Downloads Portal]. The packages served from the site use Joomla&#039;s AWS account. You will need to log into the AWS console to upload the packages to S3 under the &amp;lt;tt&amp;gt;joomla-official-downloads&amp;lt;/tt&amp;gt; bucket. The exact path inside the bucket is &amp;lt;tt&amp;gt;joomladownloads/joomla&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; where &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; is the major version number (i.e. &amp;lt;tt&amp;gt;joomla3&amp;lt;/tt&amp;gt;), note for compatibility with Akeeba Release System folders for each individual release are not used.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Update Server =====&lt;br /&gt;
The Joomla! Update Server is used as a mirror for the download packages. After connecting to the server, you should create a new folder at &amp;lt;tt&amp;gt;www/releases/&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; (i.e. &amp;lt;tt&amp;gt;www/releases/3.9.1&amp;lt;/tt&amp;gt; for the 3.9.1 release) and upload the packages here.&lt;br /&gt;
&lt;br /&gt;
===== GitHub =====&lt;br /&gt;
The packages are also uploaded to GitHub. This is similar to the steps for alpha, beta, and release candidate releases above. Note that you only need to push the release tag at this point (i.e. &amp;lt;tt&amp;gt;git push --tags&amp;lt;/tt&amp;gt;), you can wait to push the updated release branch until after the release is available.&lt;br /&gt;
&lt;br /&gt;
=== Announcements ===&lt;br /&gt;
==== joomla.org ====&lt;br /&gt;
For all stable releases, the main release announcement is published to the &amp;lt;tt&amp;gt;Joomla! Official News &amp;gt; Project Release News&amp;lt;/tt&amp;gt; category on the main &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; website.&lt;br /&gt;
&lt;br /&gt;
For a minor release, an updated version of the landing page at &amp;lt;tt&amp;gt;joomla.org/3&amp;lt;/tt&amp;gt; is published. Generally, this site is backed up from the sandbox location and transferred to the live domain shortly before release, this transfer should be coordinated with the [https://volunteers.joomla.org/teams/webmasters-team Webmasters Team].&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
For security releases, all accompanying articles are published to the &amp;lt;tt&amp;gt;News &amp;gt; Security Centre&amp;lt;/tt&amp;gt; category on the Joomla! Developer Network. As these articles are referenced from the main release announcement, these should be published at the same time.&lt;br /&gt;
&lt;br /&gt;
== Update Server ==&lt;br /&gt;
The update server must be updated to alert websites that a core update is available, this subdomain is managed on GitHub at https://github.com/joomla/update.joomla.org. Prior to each release, a pull request should be prepared with necessary changes for the release (generally this updates the version number, announcement URL, package URLs, and package checksums for the stable release and updating the version number for the nightly builds), see https://github.com/joomla/update.joomla.org/pull/117 as an example of this update for the 3.9.1 release. Pushes to the &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch of this repo are automatically deployed thanks to a Jenkins job, notifications for many of the Jenkins jobs are sent to the &amp;lt;tt&amp;gt;.org Build Notifications&amp;lt;/tt&amp;gt; channel on RingCentral Glip so you should ensure a success notification was sent here otherwise check if there was an issue with the job and/or manually deploy the updated files.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;update.joomla.org&amp;lt;/tt&amp;gt; subdomain is behind a CDN and it generally takes 5-10 minutes for all nodes to update, if need be you can access &amp;lt;tt&amp;gt;update1.joomla.org&amp;lt;/tt&amp;gt; to verify the right files are deployed without using the CDN.&lt;br /&gt;
&lt;br /&gt;
== Post Release Actions ==&lt;br /&gt;
Once the release is published, there are several additional tasks that should be completed shortly after.&lt;br /&gt;
&lt;br /&gt;
=== Post-Release Version Bump ===&lt;br /&gt;
The version should be bumped to the next version scheduled for release using the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script (i.e. after the 3.9.1 release this would be bumped to 3.9.2-dev).&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
After incrementing the version number, you should merge all the release changes forward to other active branches (especially in the case of a security release). Ensure you pay careful attention while resolving merge conflicts, when making a merge that includes a version bump generally all files which contain the version string and/or release date will be in conflict (as of this writing this is 8 files).&lt;br /&gt;
&lt;br /&gt;
=== Push Updated Branches ===&lt;br /&gt;
When ready, you should directly push your updates to the Git repo. If you elect to use pull requests, the pull requests should NEVER be squashed or rebased otherwise this will wipe out Git&#039;s awareness of the merged commits and will make your next branch merges even more complex. Likewise, as an example, if the commit preparing the 3.9.1 release and bumping the version string to 3.9.2-dev were squash merged as a pull request, then the commit that the 3.9.1 release was tagged from would not be in the repository.&lt;br /&gt;
&lt;br /&gt;
=== Website Updates ===&lt;br /&gt;
With all code updates pushed, there are several website updates that need to be triggered.&lt;br /&gt;
&lt;br /&gt;
==== api.joomla.org ====&lt;br /&gt;
With each release, an updated build of the API documentation should be deployed to the &amp;lt;tt&amp;gt;api.joomla.org&amp;lt;/tt&amp;gt; website. These updates are triggered with the &amp;lt;tt&amp;gt;Joomla! API &amp;gt; Deploy Docs - CMS&amp;lt;/tt&amp;gt; job on Jenkins. As this job relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed.&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
After a release, the &amp;lt;tt&amp;gt;Joomla! Project Roadmap&amp;lt;/tt&amp;gt; article in the &amp;lt;tt&amp;gt;Uncategorised&amp;lt;/tt&amp;gt; category should be updated to reflect the newly released version and updated links. The version whitelist for the statistics server should also be updated to allow the next version to be submitted; if you have not already, you should have a clone of the https://github.com/joomla/statistics-server repository on your local system. Once cloned and set up, run the &amp;lt;tt&amp;gt;bin/stats tags:joomla&amp;lt;/tt&amp;gt; command to regenerate the Joomla version whitelist. As this command relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed. The updated &amp;lt;tt&amp;gt;versions/joomla.json&amp;lt;/tt&amp;gt; should be committed and pushed, and a Jenkins job will deploy the updated site resources.&lt;br /&gt;
&lt;br /&gt;
== Additional Considerations ==&lt;br /&gt;
The release manager or a delegate is suggested to be in communication with the Webmasters Team to ensure the &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; websites are updated in a timely manner. When a security release is scheduled, it is encouraged to share the update release package with the team so that our sites may be updated before the fix is made public to mitigate the chance of the vulnerability being used to exploit one of our sites.&lt;br /&gt;
&lt;br /&gt;
= Framework Release Cycle =&lt;br /&gt;
The packages of the Joomla Framework are on an independent lifecycle meaning each package can be updated and released independently of all others. Generally the only restriction is with major releases, which should coincide with the CMS release cycle (i.e. CMS 3.x uses Framework 1.x, CMS 4.x will use Framework 2.x therefore Framework 2.0 stable releases should not be made until the CMS is in its beta phase at the earliest).&lt;br /&gt;
&lt;br /&gt;
== Tagging a Release ==&lt;br /&gt;
Most packages can be tagged and released through the &amp;lt;tt&amp;gt;Joomla! Framework &amp;gt; Package Release&amp;lt;/tt&amp;gt; job on Jenkins, however as of this writing this job only supports tagging releases from a repository&#039;s &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch. To tag a release, select the package you wish to update and specify the version you are releasing in the job&#039;s parameters and run the job; all releases should follow Semantic Versioning to set the correct number.&lt;br /&gt;
&lt;br /&gt;
Once the job has completed, you should verify the new release is visible on [https://packagist.org/packages/joomla/ Packagist]. Within a day, the new update should be visible on the [https://framework.joomla.org/status Joomla Framework Status page] (the database is updated via cron job reading from Packagist&#039;s API), if the updated version isn&#039;t seen on the site in a relatively timely manner you should clone the website locally and debug the &amp;lt;tt&amp;gt;packagist:sync:releases&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
== Security Releases ==&lt;br /&gt;
When a security release is created, a pull request should be sent to the [https://github.com/FriendsOfPHP/security-advisories FriendsOfPHP/security-advisories repository] with relevant details. This repository is used by many tools in the PHP and Composer ecosystem to alert users of security issues. https://github.com/FriendsOfPHP/security-advisories/pull/134 is an example of this pull request.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584508</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584508"/>
		<updated>2018-12-18T02:12:48Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Finish out CMS release section, clear old version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general checklist for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;This document is a work in progress.&#039;&#039; The information on this page is currently undergoing a major revision, the previous version of this document is available below as a point of reference for these revisions.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
= CMS Release Cycle =&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums], in close coordination with the [https://volunteers.joomla.org/teams/bug-squad Bug Squad] and [https://volunteers.joomla.org/teams/cms-release-team CMS Release Team], should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 3.9.1 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt;: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next major release (the branch&#039;s name will always be the version it represents)&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that staging is merged to the next minor branch and the next minor branch is merged to the next major branch):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt; should be merged into &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
== Preparing To Release ==&lt;br /&gt;
When scheduling and preparing a release, the timeline should be communicated with the Production and Marketing &amp;amp; Communication Department leadership so that all teams are prepared to support the release. Note that when scheduling releases, consideration should be given to holidays around the world and the impact of issuing a release near those periods considered. Helpful resources include http://interfaith-calendar.org/ and https://www.timeanddate.com/holidays/&lt;br /&gt;
&lt;br /&gt;
=== Release Schedule ===&lt;br /&gt;
==== Minor Release ====&lt;br /&gt;
Given the nature of a minor release, the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* Six weeks prior to planned stable release: Tag the first Beta release&lt;br /&gt;
** At this point the release should be considered feature complete and new features should be deferred to the next minor release&lt;br /&gt;
* Weekly Beta releases should follow this until the Release Candidate&lt;br /&gt;
* Two weeks prior to planned stable release: Tag the Release Candidate&lt;br /&gt;
** At this point the release branch (generally &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt;) should remain closed for committing except for high priority bug fixes and language updates&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* One week prior to planned stable release: If necessary, create a second Release Candidate&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
==== Maintenance Release ====&lt;br /&gt;
Maintenance releases operate on a 4-6 week cycle and the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* 4-5 days before planned release date: Tag a Release Candidate&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
=== Reviewing Release Changes ===&lt;br /&gt;
Before tagging a release, the list of changes in the release should be reviewed by the release manager and/or leadership team. The list of changes can be found using GitHub&#039;s compare function with the URL &amp;lt;tt&amp;gt;https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...staging&amp;lt;/tt&amp;gt; which will compare the changes from &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; to the current staging branch (for example, https://github.com/joomla/joomla-cms/compare/3.9.0...3.9.1-rc is the comparison from the 3.9.0 release tag to the 3.9.1-rc tag). Key purposes of this review include:&lt;br /&gt;
&lt;br /&gt;
* Ensuring all patches are compliant with Semantic Versioning (SemVer) (i.e. no backward compatibility breaks in minor or maintenance releases and no features in maintenance releases); SemVer violations should be cleared with the Production Department leadership&lt;br /&gt;
* Ensuring all code revisions are compatible with Joomla&#039;s minimum supported versions (i.e. no PHP 5.4 syntax in 3.x releases where PHP 5.3 is the minimum supported version, exceptions may be made if introducing a code path and files that will only be executed on newer PHP versions)&lt;br /&gt;
** Joomla&#039;s testing integrations should not be relied on in full for this as there are large portions of the Joomla code base which do not have automated test coverage, and as of this writing, there is not a code linting process in place checking for potential issues&lt;br /&gt;
* Ensuring features and &amp;quot;significant&amp;quot; changes are documented&lt;br /&gt;
&lt;br /&gt;
=== Security Fixes ===&lt;br /&gt;
From time to time, security fixes must be included in a release. Prior to every release, the release manager should check with the [https://volunteers.joomla.org/teams/security-strike-team Security Strike Team] to determine if security fixes are required, and if so ensure this is communicated to all members involved with release work (i.e. the marketing team liaison who assists with the publication of release related material). When a security release is necessary, an internal Release Candidate should be built for testing by the Security Strike Team, CMS Release Team, and [https://volunteers.joomla.org/teams/cms-maintenance-team CMS Maintenance Team] with all security patches included. These teams should also receive information about the vulnerabilities being addressed to ensure there are no regressions in the impacted areas.&lt;br /&gt;
&lt;br /&gt;
Note, when a security fix involves a Joomla Framework package, the Framework package should be patched first and a release created of the affected package then the CMS updated with &amp;lt;tt&amp;gt;composer update&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Building a Release ==&lt;br /&gt;
Building a release starts with checking that any files and folders that have been deleted are included in the arrays in the installer script at &amp;lt;tt&amp;gt;administrator/components/com_admin/script.php&amp;lt;/tt&amp;gt;. There is a helper script in the repository to assist with this located at &amp;lt;tt&amp;gt;build/deleted_file_check.php&amp;lt;/tt&amp;gt;. Running &amp;lt;tt&amp;gt;php build/deleted_file_check.php&amp;lt;/tt&amp;gt; with its required &amp;lt;tt&amp;gt;--from&amp;lt;/tt&amp;gt; option will write a file to &amp;lt;tt&amp;gt;build/deleted_files.txt&amp;lt;/tt&amp;gt; with the list of files deleted since the from reference. Please see the PHP file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
The following steps require the individual to create commits and tags. It is suggested that these commits and tags be GPG signed as an extra security step but this is not a mandatory requirement as of this writing.&lt;br /&gt;
&lt;br /&gt;
If creating a security release, at this point you should apply all patches provided by the security team.&lt;br /&gt;
&lt;br /&gt;
Once it is confirmed that the deleted files listing is correct, the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script should be executed to set the new version number. This script will also perform maintenance steps such as correcting the copyright year ranges for all files and replacing the &amp;lt;tt&amp;gt;__DEPLOY_VERSION__&amp;lt;/tt&amp;gt; placeholder. Please see the file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
After running this script, review all changes with &amp;lt;tt&amp;gt;git diff&amp;lt;/tt&amp;gt; as a final check before creating your release commit. Once you are satisfied that all changes are correct, commit your changes locally. Once committed, create the release tag locally; all release tags should be the version number you are creating and should match the output of &amp;lt;tt&amp;gt;Joomla\CMS\Version::getShortVersion()&amp;lt;/tt&amp;gt; (so if you have created 3.9.0-beta2 then the tag should be named 3.9.0-beta2).&lt;br /&gt;
&lt;br /&gt;
Once the tag has been created, you will run the &amp;lt;tt&amp;gt;build/build.php&amp;lt;/tt&amp;gt; script to generate the release packages. To ensure a clean build is produced, the script makes an archive of the tag you are building using the &amp;lt;tt&amp;gt;git archive&amp;lt;/tt&amp;gt; command and extracts this to the &amp;lt;tt&amp;gt;build/tmp/&amp;lt;timestamp&amp;gt;&amp;lt;/tt&amp;gt; directory. Depending on the patch version number, the following packages will be created in the &amp;lt;tt&amp;gt;build/tmp/packages&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* 0: Full installation and upgrade packages&lt;br /&gt;
* 1: Full installation, upgrade packages, and patch packages for x.y.0 to x.y.1&lt;br /&gt;
* 2+: Full installation, upgrade packages, patch packages for x.y.0 to x.y.&amp;lt;new&amp;gt; and x.y.&amp;lt;new-1&amp;gt; to x.y.&amp;lt;new&amp;gt; (i.e. when creating 3.8.8 this will create a patch package suitable for all 3.8.x releases and an optimized patch package for 3.8.7 to 3.8.8)&lt;br /&gt;
&lt;br /&gt;
Additionally, the script will generate a &amp;lt;tt&amp;gt;build/tmp/checksums.txt&amp;lt;/tt&amp;gt; file with the checksums for all generated packages.&lt;br /&gt;
&lt;br /&gt;
After the packages are created, you should validate that you are able to install and update a site using the ZIP packages (as these are the most frequently used type and served by our update system).&lt;br /&gt;
&lt;br /&gt;
== Publishing a Release ==&lt;br /&gt;
=== Release Packages ===&lt;br /&gt;
Depending on the type of release being created, you will publish the release packages in different locations.&lt;br /&gt;
&lt;br /&gt;
==== Alpha, Beta, Release Candidate ====&lt;br /&gt;
The packages for these releases are uploaded to GitHub. When ready to publish, you should push the release tag you created to GitHub and use their interface to create a release from the tag and upload the packages. There is a text template used for the releases, generally you can copy a previous release&#039;s text and adjust it to the version you are publishing.&lt;br /&gt;
&lt;br /&gt;
==== Stable ====&lt;br /&gt;
The packages for stable releases are uploaded to multiple locations, this is in part driven by the fact that the Amazon Web Services (AWS) S3 region used by Joomla is blocked in some locations therefore download mirrors are available when necessary.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Downloads Portal =====&lt;br /&gt;
The canonical source for all stable releases is the [https://downloads.joomla.org/ Joomla! Downloads Portal]. The packages served from the site use Joomla&#039;s AWS account. You will need to log into the AWS console to upload the packages to S3 under the &amp;lt;tt&amp;gt;joomla-official-downloads&amp;lt;/tt&amp;gt; bucket. The exact path inside the bucket is &amp;lt;tt&amp;gt;joomladownloads/joomla&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; where &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; is the major version number (i.e. &amp;lt;tt&amp;gt;joomla3&amp;lt;/tt&amp;gt;), note for compatibility with Akeeba Release System folders for each individual release are not used.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Update Server =====&lt;br /&gt;
The Joomla! Update Server is used as a mirror for the download packages. After connecting to the server, you should create a new folder at &amp;lt;tt&amp;gt;www/releases/&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; (i.e. &amp;lt;tt&amp;gt;www/releases/3.9.1&amp;lt;/tt&amp;gt; for the 3.9.1 release) and upload the packages here.&lt;br /&gt;
&lt;br /&gt;
===== GitHub =====&lt;br /&gt;
The packages are also uploaded to GitHub. This is similar to the steps for alpha, beta, and release candidate releases above. Note that you only need to push the release tag at this point (i.e. &amp;lt;tt&amp;gt;git push --tags&amp;lt;/tt&amp;gt;), you can wait to push the updated release branch until after the release is available.&lt;br /&gt;
&lt;br /&gt;
=== Announcements ===&lt;br /&gt;
==== joomla.org ====&lt;br /&gt;
For all stable releases, the main release announcement is published to the &amp;lt;tt&amp;gt;Joomla! Official News &amp;gt; Project Release News&amp;lt;/tt&amp;gt; category on the main &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; website.&lt;br /&gt;
&lt;br /&gt;
For a minor release, an updated version of the landing page at &amp;lt;tt&amp;gt;joomla.org/3&amp;lt;/tt&amp;gt; is published. Generally, this site is backed up from the sandbox location and transferred to the live domain shortly before release, this transfer should be coordinated with the [https://volunteers.joomla.org/teams/webmasters-team Webmasters Team].&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
For security releases, all accompanying articles are published to the &amp;lt;tt&amp;gt;News &amp;gt; Security Centre&amp;lt;/tt&amp;gt; category on the Joomla! Developer Network. As these articles are referenced from the main release announcement, these should be published at the same time.&lt;br /&gt;
&lt;br /&gt;
== Update Server ==&lt;br /&gt;
The update server must be updated to alert websites that a core update is available, this subdomain is managed on GitHub at https://github.com/joomla/update.joomla.org. Prior to each release, a pull request should be prepared with necessary changes for the release (generally this updates the version number, announcement URL, package URLs, and package checksums for the stable release and updating the version number for the nightly builds), see https://github.com/joomla/update.joomla.org/pull/117 as an example of this update for the 3.9.1 release. Pushes to the &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch of this repo are automatically deployed thanks to a Jenkins job, notifications for many of the Jenkins jobs are sent to the &amp;lt;tt&amp;gt;.org Build Notifications&amp;lt;/tt&amp;gt; channel on RingCentral Glip so you should ensure a success notification was sent here otherwise check if there was an issue with the job and/or manually deploy the updated files.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;update.joomla.org&amp;lt;/tt&amp;gt; subdomain is behind a CDN and it generally takes 5-10 minutes for all nodes to update, if need be you can access &amp;lt;tt&amp;gt;update1.joomla.org&amp;lt;/tt&amp;gt; to verify the right files are deployed without using the CDN.&lt;br /&gt;
&lt;br /&gt;
== Post Release Actions ==&lt;br /&gt;
Once the release is published, there are several additional tasks that should be completed shortly after.&lt;br /&gt;
&lt;br /&gt;
=== Post-Release Version Bump ===&lt;br /&gt;
The version should be bumped to the next version scheduled for release using the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script (i.e. after the 3.9.1 release this would be bumped to 3.9.2-dev).&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
After incrementing the version number, you should merge all the release changes forward to other active branches (especially in the case of a security release). Ensure you pay careful attention while resolving merge conflicts, when making a merge that includes a version bump generally all files which contain the version string and/or release date will be in conflict (as of this writing this is 8 files).&lt;br /&gt;
&lt;br /&gt;
=== Push Updated Branches ===&lt;br /&gt;
When ready, you should directly push your updates to the Git repo. If you elect to use pull requests, the pull requests should NEVER be squashed or rebased otherwise this will wipe out Git&#039;s awareness of the merged commits and will make your next branch merges even more complex. Likewise, as an example, if the commit preparing the 3.9.1 release and bumping the version string to 3.9.2-dev were squash merged as a pull request, then the commit that the 3.9.1 release was tagged from would not be in the repository.&lt;br /&gt;
&lt;br /&gt;
=== Website Updates ===&lt;br /&gt;
With all code updates pushed, there are several website updates that need to be triggered.&lt;br /&gt;
&lt;br /&gt;
==== api.joomla.org ====&lt;br /&gt;
With each release, an updated build of the API documentation should be deployed to the &amp;lt;tt&amp;gt;api.joomla.org&amp;lt;/tt&amp;gt; website. These updates are triggered with the &amp;lt;tt&amp;gt;Joomla! API &amp;gt; Deploy Docs - CMS&amp;lt;/tt&amp;gt; job on Jenkins. As this job relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed.&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
After a release, the &amp;lt;tt&amp;gt;Joomla! Project Roadmap&amp;lt;/tt&amp;gt; article in the &amp;lt;tt&amp;gt;Uncategorised&amp;lt;/tt&amp;gt; category should be updated to reflect the newly released version and updated links. The version whitelist for the statistics server should also be updated to allow the next version to be submitted; if you have not already, you should have a clone of the https://github.com/joomla/statistics-server repository on your local system. Once cloned and set up, run the &amp;lt;tt&amp;gt;bin/stats tags:joomla&amp;lt;/tt&amp;gt; command to regenerate the Joomla version whitelist. As this command relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed. The updated &amp;lt;tt&amp;gt;versions/joomla.json&amp;lt;/tt&amp;gt; should be committed and pushed, and a Jenkins job will deploy the updated site resources.&lt;br /&gt;
&lt;br /&gt;
== Additional Considerations ==&lt;br /&gt;
The release manager or a delegate is suggested to be in communication with the Webmasters Team to ensure the &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; websites are updated in a timely manner. When a security release is scheduled, it is encouraged to share the update release package with the team so that our sites may be updated before the fix is made public to mitigate the chance of the vulnerability being used to exploit one of our sites.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584399</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584399"/>
		<updated>2018-12-16T17:38:55Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: A lot of text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general checklist for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;This document is a work in progress.&#039;&#039; The information on this page is currently undergoing a major revision, the previous version of this document is available below as a point of reference for these revisions.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
= CMS Release Cycle =&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums], in close coordination with the [https://volunteers.joomla.org/teams/bug-squad Bug Squad] and [https://volunteers.joomla.org/teams/cms-release-team CMS Release Team], should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 3.9.1 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt;: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next major release (the branch&#039;s name will always be the version it represents)&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that staging is merged to the next minor branch and the next minor branch is merged to the next major branch):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt; should be merged into &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
== Preparing To Release ==&lt;br /&gt;
When scheduling and preparing a release, the timeline should be communicated with the Production and Marketing &amp;amp; Communication Department leadership so that all teams are prepared to support the release. Note that when scheduling releases, consideration should be given to holidays around the world and the impact of issuing a release near those periods considered. Helpful resources include http://interfaith-calendar.org/ and https://www.timeanddate.com/holidays/&lt;br /&gt;
&lt;br /&gt;
=== Release Schedule ===&lt;br /&gt;
==== Minor Release ====&lt;br /&gt;
Given the nature of a minor release, the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* Six weeks prior to planned stable release: Tag the first Beta release&lt;br /&gt;
** At this point the release should be considered feature complete and new features should be deferred to the next minor release&lt;br /&gt;
* Weekly Beta releases should follow this until the Release Candidate&lt;br /&gt;
* Two weeks prior to planned stable release: Tag the Release Candidate&lt;br /&gt;
** At this point the release branch (generally &amp;lt;tt&amp;gt;staging&amp;lt;/tt&amp;gt;) should remain closed for committing except for high priority bug fixes and language updates&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* One week prior to planned stable release: If necessary, create a second Release Candidate&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
==== Maintenance Release ====&lt;br /&gt;
Maintenance releases operate on a 4-6 week cycle and the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* 4-5 days before planned release date: Tag a Release Candidate&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
=== Reviewing Release Changes ===&lt;br /&gt;
Before tagging a release, the list of changes in the release should be reviewed by the release manager and/or leadership team. The list of changes can be found using GitHub&#039;s compare function with the URL &amp;lt;tt&amp;gt;https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...staging&amp;lt;/tt&amp;gt; which will compare the changes from &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; to the current staging branch (for example, https://github.com/joomla/joomla-cms/compare/3.9.0...3.9.1-rc is the comparison from the 3.9.0 release tag to the 3.9.1-rc tag). Key purposes of this review include:&lt;br /&gt;
&lt;br /&gt;
* Ensuring all patches are compliant with Semantic Versioning (SemVer) (i.e. no backward compatibility breaks in minor or maintenance releases and no features in maintenance releases); SemVer violations should be cleared with the Production Department leadership&lt;br /&gt;
* Ensuring all code revisions are compatible with Joomla&#039;s minimum supported versions (i.e. no PHP 5.4 syntax in 3.x releases where PHP 5.3 is the minimum supported version, exceptions may be made if introducing a code path and files that will only be executed on newer PHP versions)&lt;br /&gt;
** Joomla&#039;s testing integrations should not be relied on in full for this as there are large portions of the Joomla code base which do not have automated test coverage, and as of this writing, there is not a code linting process in place checking for potential issues&lt;br /&gt;
* Ensuring features and &amp;quot;significant&amp;quot; changes are documented&lt;br /&gt;
&lt;br /&gt;
=== Security Fixes ===&lt;br /&gt;
From time to time, security fixes must be included in a release. Prior to every release, the release manager should check with the [https://volunteers.joomla.org/teams/security-strike-team Security Strike Team] to determine if security fixes are required, and if so ensure this is communicated to all members involved with release work (i.e. the marketing team liaison who assists with the publication of release related material). When a security release is necessary, an internal Release Candidate should be built for testing by the Security Strike Team, CMS Release Team, and [https://volunteers.joomla.org/teams/cms-maintenance-team CMS Maintenance Team] with all security patches included. These teams should also receive information about the vulnerabilities being addressed to ensure there are no regressions in the impacted areas.&lt;br /&gt;
&lt;br /&gt;
Note, when a security fix involves a Joomla Framework package, the Framework package should be patched first and a release created of the affected package then the CMS updated with &amp;lt;tt&amp;gt;composer update&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Building a Release ==&lt;br /&gt;
Building a release starts with checking that any files and folders that have been deleted are included in the arrays in the installer script at &amp;lt;tt&amp;gt;administrator/components/com_admin/script.php&amp;lt;/tt&amp;gt;. There is a helper script in the repository to assist with this located at &amp;lt;tt&amp;gt;build/deleted_file_check.php&amp;lt;/tt&amp;gt;. Running &amp;lt;tt&amp;gt;php build/deleted_file_check.php&amp;lt;/tt&amp;gt; with its required &amp;lt;tt&amp;gt;--from&amp;lt;/tt&amp;gt; option will write a file to &amp;lt;tt&amp;gt;build/deleted_files.txt&amp;lt;/tt&amp;gt; with the list of files deleted since the from reference. Please see the PHP file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
The following steps require the individual to create commits and tags. It is suggested that these commits and tags be GPG signed as an extra security step but this is not a mandatory requirement as of this writing.&lt;br /&gt;
&lt;br /&gt;
If creating a security release, at this point you should apply all patches provided by the security team.&lt;br /&gt;
&lt;br /&gt;
Once it is confirmed that the deleted files listing is correct, the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script should be executed to set the new version number. This script will also perform maintenance steps such as correcting the copyright year ranges for all files and replacing the &amp;lt;tt&amp;gt;__DEPLOY_VERSION__&amp;lt;/tt&amp;gt; placeholder. Please see the file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
After running this script, review all changes with &amp;lt;tt&amp;gt;git diff&amp;lt;/tt&amp;gt; as a final check before creating your release commit. Once you are satisfied that all changes are correct, commit your changes locally. Once committed, create the release tag locally; all release tags should be the version number you are creating and should match the output of &amp;lt;tt&amp;gt;Joomla\CMS\Version::getShortVersion()&amp;lt;/tt&amp;gt; (so if you have created 3.9.0-beta2 then the tag should be named 3.9.0-beta2).&lt;br /&gt;
&lt;br /&gt;
Once the tag has been created, you will run the &amp;lt;tt&amp;gt;build/build.php&amp;lt;/tt&amp;gt; script to generate the release packages. To ensure a clean build is produced, the script makes an archive of the tag you are building using the &amp;lt;tt&amp;gt;git archive&amp;lt;/tt&amp;gt; command and extracts this to the &amp;lt;tt&amp;gt;build/tmp/&amp;lt;timestamp&amp;gt;&amp;lt;/tt&amp;gt; directory. Depending on the patch version number, the following packages will be created in the &amp;lt;tt&amp;gt;build/tmp/packages&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* 0: Full installation and upgrade packages&lt;br /&gt;
* 1: Full installation, upgrade packages, and patch packages for x.y.0 to x.y.1&lt;br /&gt;
* 2+: Full installation, upgrade packages, patch packages for x.y.0 to x.y.&amp;lt;new&amp;gt; and x.y.&amp;lt;new-1&amp;gt; to x.y.&amp;lt;new&amp;gt; (i.e. when creating 3.8.8 this will create a patch package suitable for all 3.8.x releases and an optimized patch package for 3.8.7 to 3.8.8)&lt;br /&gt;
&lt;br /&gt;
Additionally, the script will generate a &amp;lt;tt&amp;gt;build/tmp/checksums.txt&amp;lt;/tt&amp;gt; file with the checksums for all generated packages.&lt;br /&gt;
&lt;br /&gt;
After the packages are created, you should validate that you are able to install and update a site using the ZIP packages (as these are the most frequently used type and served by our update system).&lt;br /&gt;
&lt;br /&gt;
== Publishing a Release ==&lt;br /&gt;
=== Release Packages ===&lt;br /&gt;
Depending on the type of release being created, you will publish the release packages in different locations.&lt;br /&gt;
&lt;br /&gt;
==== Alpha, Beta, Release Candidate ====&lt;br /&gt;
The packages for these releases are uploaded to GitHub. When ready to publish, you should push the release tag you created to GitHub and use their interface to create a release from the tag and upload the packages. There is a text template used for the releases, generally you can copy a previous release&#039;s text and adjust it to the version you are publishing.&lt;br /&gt;
&lt;br /&gt;
==== Stable ====&lt;br /&gt;
The packages for stable releases are uploaded to multiple locations, this is in part driven by the fact that the Amazon Web Services (AWS) S3 region used by Joomla is blocked in some locations therefore download mirrors are available when necessary.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Downloads Portal =====&lt;br /&gt;
The canonical source for all stable releases is the [https://downloads.joomla.org/ Joomla! Downloads Portal]. The packages served from the site use Joomla&#039;s AWS account. You will need to log into the AWS console to upload the packages to S3 under the &amp;lt;tt&amp;gt;joomla-official-downloads&amp;lt;/tt&amp;gt; bucket. The exact path inside the bucket is &amp;lt;tt&amp;gt;joomladownloads/joomla&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; where &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; is the major version number (i.e. &amp;lt;tt&amp;gt;joomla3&amp;lt;/tt&amp;gt;), note for compatibility with Akeeba Release System folders for each individual release are not used.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Update Server =====&lt;br /&gt;
The Joomla! Update Server is used as a mirror for the download packages. After connecting to the server, you should create a new folder at &amp;lt;tt&amp;gt;www/releases/&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; (i.e. &amp;lt;tt&amp;gt;www/releases/3.9.1&amp;lt;/tt&amp;gt; for the 3.9.1 release) and upload the packages here.&lt;br /&gt;
&lt;br /&gt;
===== GitHub =====&lt;br /&gt;
The packages are also uploaded to GitHub. This is similar to the steps for alpha, beta, and release candidate releases above.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
&lt;br /&gt;
= Old Version =&lt;br /&gt;
This is a general checklist when a version of Joomla! is released. Keep in mind that a major release differs a lot from a [[Minor Release]] or even a [[Maintenance Release]]. The checklist here describes the steps that need to be done for (at least) [[Maintenance Release]] and [[Minor Release]].&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
It depends on the [[Development Cycle]] when the checklist is triggered. A release can be done during every stage of the [[Development Cycle]], it does not matter if you release a beta or a stable version, this is a general checklist that can be used when releasing a new version of Joomla! The checklist starts when it&#039;s decided to release a version:&lt;br /&gt;
&lt;br /&gt;
=== Preparation phase ===&lt;br /&gt;
# Communication pre-release: check with PLT on timing&lt;br /&gt;
# Communication pre-release: inform Bug Squad and LT&#039;s about timing&lt;br /&gt;
# Decision: when the above has positive result, set a date and time for release&lt;br /&gt;
# [Communication pre-release: inform Global Forum Moderators about upcoming release]&lt;br /&gt;
# Communication pre-release: check availability and assign release tasks to JBS and PLT members&lt;br /&gt;
# Minimum 14 days prior to a minor release: freeze trunk for language changes&lt;br /&gt;
# Minimum 7 days prior to a patch release: freeze trunk for language changes&lt;br /&gt;
# Minimum 3 days prior to release: freeze trunk for all changes, draft release notes to translation teams, package release candidate for testing&lt;br /&gt;
# Day of release: add the new release on Joomlacode and upload the files, update web pages&lt;br /&gt;
# Announce on forum, announce to LT&#039;s&lt;br /&gt;
# [[Joomla:Release_procedure_and_checklist#Pages to update|Update specific web pages with current version data]]&lt;br /&gt;
# Contact caped crusader for updating Joomla related sites&lt;br /&gt;
# [[Joomla:Release_procedure_and_checklist#Sites to update|Update the sites]]&lt;br /&gt;
&lt;br /&gt;
=== Pre-release phase ===&lt;br /&gt;
# Apply latest installation translations (need to be delivered by translation work group Thomas Hunziker).&lt;br /&gt;
# Create pre-release package for testing.&lt;br /&gt;
# Offer pre-package to testers: [[Bug Squad]] members, [[Development Team]] members, translation members, and [https://groups.google.com/forum/#!forum/jtesters JTesters]&lt;br /&gt;
# If problems are found during this stage, go back to fix the problem. Use the [[Joomla! Maintenance Procedures]] and repeat until tests are performed successfully.&lt;br /&gt;
# Draft the release notes on Joomla.org and post draft to the [http://forum.joomla.org/viewforum.php?f=54 private translation forum].&lt;br /&gt;
# Obtain any CVE numbers needed.&lt;br /&gt;
# Draft security notices as needed and leave unpublished on [https://developer.joomla.org Joomla! Developer Network].&lt;br /&gt;
&lt;br /&gt;
=== Release phase ===&lt;br /&gt;
# Check with JSST for security fixes. *&lt;br /&gt;
# Create release notes document on joomla.org.&lt;br /&gt;
# Run the bump.php script&lt;br /&gt;
# Check language/en-GB/en-GB.files_joomla.sys.ini file for version number (not needed for minor update).&lt;br /&gt;
# Commit and tag release locally&lt;br /&gt;
# Package build by running build/build.php&lt;br /&gt;
# Packages are now in the build/tmp folder&lt;br /&gt;
# Push to GitHub&lt;br /&gt;
# If problems are found during this stage, go back to fix the problem. Use the [[Joomla! Maintenance Procedures]] and repeat until tests are performed successfully.&lt;br /&gt;
# Add package to GitHub&lt;br /&gt;
## This must be done after the version has been tagged and the tag pushed to GitHub due to how the Releases system works&lt;br /&gt;
## After pushing the tag, edit the release and attach all of the release packages to the release.&lt;br /&gt;
## Copy the description from a previous release and update for the new release.&lt;br /&gt;
# Update XML file on update.joomla.org site for the new version number information.&lt;br /&gt;
## FTP connect to update1.joomla.org and Navigate to www/core&lt;br /&gt;
## All releases&lt;br /&gt;
### Change version attribute in list.xml (don&#039;t add new line except when incrementing major/minor version numbers)&lt;br /&gt;
## LTS Release&lt;br /&gt;
### Change the update elements for the series with the new version number and new downloadurl and link to new archive file to extension.xml&lt;br /&gt;
## STS Release&lt;br /&gt;
### Navigate to www/core/sts&lt;br /&gt;
### Change version attribute in list_sts.xml (don&#039;t add new line except when incrementing major/minor version numbers)&lt;br /&gt;
### Change the update elements for the series with the new version number, new downloadurl and link to new archive file to extension_sts.xml, and the infourl linking to the release announcement&lt;br /&gt;
## Test auto update from prior version(s) (make sure XML files have been copied to the CDN on update.joomla.org first)&lt;br /&gt;
### All releases&lt;br /&gt;
#### Navigate to www/core/test&lt;br /&gt;
#### Change version attribute in list_test.xml (don&#039;t add new line except when incrementing major/minor version numbers)&lt;br /&gt;
### LTS&lt;br /&gt;
#### Upload patch package to this folder&lt;br /&gt;
### Change the update elements for the series with the new version number, new downloadurl and link to new archive file to extension_sts.xml, and the infourl linking to the release announcement&lt;br /&gt;
### STS&lt;br /&gt;
#### Navigate to www/core/teststs&lt;br /&gt;
#### Upload patch package to this folder&lt;br /&gt;
### Change the update elements for the series with the new version number, new downloadurl and link to new archive file to extension_sts.xml, and the infourl linking to the release announcement&lt;br /&gt;
# Update Joomla Download Portal with new release data *&lt;br /&gt;
# Publish security articles on developer site. *&lt;br /&gt;
# Publish release announcement on Joomla.org&lt;br /&gt;
# Publish announcement on the forum [Peter Martin]&lt;br /&gt;
# Update Wiki: FAQ, Version history [Mat]&lt;br /&gt;
# Post to leadership in Glip&lt;br /&gt;
# Create the Web Platform Installer packs and submit them *&lt;br /&gt;
# Add package to joomlacode.org&lt;br /&gt;
## Before the release is public, set the JoomlaCode package flags as follows: Visible=No, Public=No, Require Login=Yes.&lt;br /&gt;
## Set the Release flags as follows: Visible=Yes, Released=Yes.&lt;br /&gt;
## Once package is released, change the Package flags to Visible=Yes, Public=Yes, Require Login=No.&lt;br /&gt;
## Change the prior version package to Visible=No but leave the prior version release flags as they are.&lt;br /&gt;
&lt;br /&gt;
Note: Items with an asterisk can be skipped for non-stable releases&lt;br /&gt;
&lt;br /&gt;
=== Post-release &amp;amp; Finalization phase ===&lt;br /&gt;
# Update GitHub repo for new version development&lt;br /&gt;
## Run build/bump.php with next version&lt;br /&gt;
# Delete old release branch after confirming all commits are merged to series development head and there are no open pull requests&lt;br /&gt;
# Close security issues in security tracker&lt;br /&gt;
&lt;br /&gt;
=== Pages to update ===&lt;br /&gt;
#Global:&lt;br /&gt;
#* [https://developer.joomla.org/development-status.html Development Status]&lt;br /&gt;
#* [https://downloads.joomla.org Downloads Portal]&lt;br /&gt;
&lt;br /&gt;
=== Sites to update ===&lt;br /&gt;
#PLT Owned sites&lt;br /&gt;
#* [https://developer.joomla.org Developer Site]&lt;br /&gt;
#* [https://downloads.joomla.org Downloads Portal]&lt;br /&gt;
#* [https://api.joomla.org API Site]&lt;br /&gt;
#** Regenerate API docs for the new release via Jenkins&lt;br /&gt;
&lt;br /&gt;
=== Calculating Release Statistics ===&lt;br /&gt;
==== Using JoomlaCode and CHANGELOG ====&lt;br /&gt;
# Extract *all* issues from Tracker into spreadsheet. Make note of the date of the last release and the number of active issues at the time of the last release.&lt;br /&gt;
# Set a filter on the &amp;quot;Closed Date&amp;quot; column to be &amp;quot;after&amp;quot; &amp;quot;the day of the last release&amp;quot;. &lt;br /&gt;
#* Calculate &amp;quot;Closed&amp;quot; count by aggregating status values for Closed, Duplicate Report, Known Issue, Not a bug, Not Joomla! Core, Unable to Confirm.&lt;br /&gt;
#* Calculate &amp;quot;Fixed in SVN&amp;quot; count by aggregating status values for Open and Information Required. (Note: this value is presented two times in the report.)&lt;br /&gt;
# Set a filter on the &amp;quot;Closed Date&amp;quot; column to be blanks:&lt;br /&gt;
#* Calculate &amp;quot;Open&amp;quot; count by aggregating status values for &amp;quot;Open&amp;quot; and &amp;quot;Information Required.&amp;quot;&lt;br /&gt;
#* Calculate &amp;quot;Confirmed&amp;quot; count by aggregating status values for &amp;quot;Confirmed&amp;quot; and &amp;quot;In Progress.&amp;quot;&lt;br /&gt;
#* Calculate &amp;quot;Pending&amp;quot; count by aggregating status values for &amp;quot;Pending&amp;quot; and &amp;quot;Ready to Commit.&amp;quot;&lt;br /&gt;
# Calculate the &amp;quot;New Active Issues&amp;quot; by aggregating the &amp;quot;Open&amp;quot;, &amp;quot;Confirmed&amp;quot; and &amp;quot;Pending&amp;quot; counts.&lt;br /&gt;
# Calculate the &amp;quot;net increase/decrease&amp;quot; by subtracting the &amp;quot;Last Release Active Issues&amp;quot; from the &amp;quot;New Active Issues.&amp;quot;&lt;br /&gt;
# Count the &amp;quot;number of commits&amp;quot; by reviewing the CHANGELOG.php file and counting the documented commits.&lt;br /&gt;
&lt;br /&gt;
==== Using GitHub ====&lt;br /&gt;
# Go to https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...master where &amp;lt;version&amp;gt; is the previous release, this is GitHub&#039;s comparison view and will give stats from the previous release tag to the currently published master&lt;br /&gt;
# From this page, you can compile the number of commits, contributors, and files changed during the release period&lt;br /&gt;
&lt;br /&gt;
==== Download Statistics ====&lt;br /&gt;
# Go to http://joomlacode.org/gf/project/joomla/frs/?action=FrsReport&lt;br /&gt;
# In the filter bar, set the start date to the date of the previous release and the end date to the day before the new release&lt;br /&gt;
# The &amp;quot;Downloads By Package&amp;quot; chart is the total number of downloads for each release (i.e. 2.5.16 and 3.2.0) and includes an &amp;quot;Other&amp;quot; piece for all older version downloads&lt;br /&gt;
# The &amp;quot;Downloads By Release&amp;quot; chart separates the packages by new install and updates&lt;br /&gt;
&lt;br /&gt;
==== Alternative Method for Stats ====&lt;br /&gt;
* Fixed in SVN: Create query with close date &amp;gt; date of prior release and status = Fixed in SVN.&lt;br /&gt;
* Commits: Count from CHANGELOG.php as indicated above.&lt;br /&gt;
* New Reports: Run query with all status codes and open date &amp;gt; date of prior release.&lt;br /&gt;
* Increase / decrease in active issues: See note below&lt;br /&gt;
* Closed: Run query with closed date &amp;gt; date of prior release and status code one of Closed, Duplicate Report, Known Issue, Not a bug, Not Joomla! Core, Unable to Confirm.&lt;br /&gt;
* Open at time of release: query of all issues with status = Open or Information Required&lt;br /&gt;
* Confirmed at time of release: query of all issues with status = Confirmed or In Progress&lt;br /&gt;
* Pending at time of release: query of all issues with status = Pending or Ready to Commit&lt;br /&gt;
&lt;br /&gt;
==== Increase/Decrease in Active Issues ====&lt;br /&gt;
* Total active issues now = Open at time of release + Confirmed at time of release + Pending at time of release&lt;br /&gt;
* This number minus the total active as of prior release is the net increase or decrease&lt;br /&gt;
&lt;br /&gt;
As a check, make sure the following formula works:&lt;br /&gt;
* Prior release total active issues + New Reports - (Closed + Fixed in SVN) should equal the Total Active Issues now.&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584398</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584398"/>
		<updated>2018-12-16T16:27:54Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Scheduling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general checklist for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;This document is a work in progress.&#039;&#039; The information on this page is currently undergoing a major revision, the previous version of this document is available below as a point of reference for these revisions.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
= CMS Release Cycle =&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums] should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 3.9.1 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
* `staging`: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team&lt;br /&gt;
* `3.10-dev`: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
* `4.0-dev`: This is the release branch for the next major release (the branch&#039;s name will always be the version it represents)&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that staging is merged to the next minor branch and the next minor branch is merged to the next major branch):&lt;br /&gt;
&lt;br /&gt;
* `staging` should be merged into `3.10-dev`&lt;br /&gt;
* `3.10-dev` should be merged to `4.0-dev`&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
== Preparing To Release ==&lt;br /&gt;
When scheduling and preparing a release, the timeline should be communicated with the Production and Marketing &amp;amp; Communication Department leadership so that all teams are prepared to support the release. Note that when scheduling releases, consideration should be given to holidays around the world and the impact of issuing a release near those periods considered.&lt;br /&gt;
&lt;br /&gt;
=== Release Schedule ===&lt;br /&gt;
==== Minor Release ====&lt;br /&gt;
Given the nature of a minor release, the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* Six weeks prior to planned stable release: Tag the first Beta release&lt;br /&gt;
** At this point the release should be considered feature complete and new features should be deferred to the next minor release&lt;br /&gt;
* Weekly Beta releases should follow this until the Release Candidate&lt;br /&gt;
* Two weeks prior to planned stable release: Tag the Release Candidate&lt;br /&gt;
** At this point the release branch (generally `staging`) should remain closed for committing except for high priority bug fixes and language updates&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* One week prior to planned stable release: If necessary, create a second Release Candidate&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
==== Maintenance Release ====&lt;br /&gt;
Maintenance releases operate on a 4-6 week cycle and the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* 4-5 days before planned release date: Tag a Release Candidate&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
&lt;br /&gt;
= Old Version =&lt;br /&gt;
This is a general checklist when a version of Joomla! is released. Keep in mind that a major release differs a lot from a [[Minor Release]] or even a [[Maintenance Release]]. The checklist here describes the steps that need to be done for (at least) [[Maintenance Release]] and [[Minor Release]].&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
It depends on the [[Development Cycle]] when the checklist is triggered. A release can be done during every stage of the [[Development Cycle]], it does not matter if you release a beta or a stable version, this is a general checklist that can be used when releasing a new version of Joomla! The checklist starts when it&#039;s decided to release a version:&lt;br /&gt;
&lt;br /&gt;
=== Preparation phase ===&lt;br /&gt;
# Communication pre-release: check with PLT on timing&lt;br /&gt;
# Communication pre-release: inform Bug Squad and LT&#039;s about timing&lt;br /&gt;
# Decision: when the above has positive result, set a date and time for release&lt;br /&gt;
# [Communication pre-release: inform Global Forum Moderators about upcoming release]&lt;br /&gt;
# Communication pre-release: check availability and assign release tasks to JBS and PLT members&lt;br /&gt;
# Minimum 14 days prior to a minor release: freeze trunk for language changes&lt;br /&gt;
# Minimum 7 days prior to a patch release: freeze trunk for language changes&lt;br /&gt;
# Minimum 3 days prior to release: freeze trunk for all changes, draft release notes to translation teams, package release candidate for testing&lt;br /&gt;
# Day of release: add the new release on Joomlacode and upload the files, update web pages&lt;br /&gt;
# Announce on forum, announce to LT&#039;s&lt;br /&gt;
# [[Joomla:Release_procedure_and_checklist#Pages to update|Update specific web pages with current version data]]&lt;br /&gt;
# Contact caped crusader for updating Joomla related sites&lt;br /&gt;
# [[Joomla:Release_procedure_and_checklist#Sites to update|Update the sites]]&lt;br /&gt;
&lt;br /&gt;
=== Pre-release phase ===&lt;br /&gt;
# Apply latest installation translations (need to be delivered by translation work group Thomas Hunziker).&lt;br /&gt;
# Create pre-release package for testing.&lt;br /&gt;
# Offer pre-package to testers: [[Bug Squad]] members, [[Development Team]] members, translation members, and [https://groups.google.com/forum/#!forum/jtesters JTesters]&lt;br /&gt;
# If problems are found during this stage, go back to fix the problem. Use the [[Joomla! Maintenance Procedures]] and repeat until tests are performed successfully.&lt;br /&gt;
# Draft the release notes on Joomla.org and post draft to the [http://forum.joomla.org/viewforum.php?f=54 private translation forum].&lt;br /&gt;
# Obtain any CVE numbers needed.&lt;br /&gt;
# Draft security notices as needed and leave unpublished on [https://developer.joomla.org Joomla! Developer Network].&lt;br /&gt;
&lt;br /&gt;
=== Release phase ===&lt;br /&gt;
# Check with JSST for security fixes. *&lt;br /&gt;
# Create release notes document on joomla.org.&lt;br /&gt;
# Run the bump.php script&lt;br /&gt;
# Check language/en-GB/en-GB.files_joomla.sys.ini file for version number (not needed for minor update).&lt;br /&gt;
# Commit and tag release locally&lt;br /&gt;
# Package build by running build/build.php&lt;br /&gt;
# Packages are now in the build/tmp folder&lt;br /&gt;
# Push to GitHub&lt;br /&gt;
# If problems are found during this stage, go back to fix the problem. Use the [[Joomla! Maintenance Procedures]] and repeat until tests are performed successfully.&lt;br /&gt;
# Add package to GitHub&lt;br /&gt;
## This must be done after the version has been tagged and the tag pushed to GitHub due to how the Releases system works&lt;br /&gt;
## After pushing the tag, edit the release and attach all of the release packages to the release.&lt;br /&gt;
## Copy the description from a previous release and update for the new release.&lt;br /&gt;
# Update XML file on update.joomla.org site for the new version number information.&lt;br /&gt;
## FTP connect to update1.joomla.org and Navigate to www/core&lt;br /&gt;
## All releases&lt;br /&gt;
### Change version attribute in list.xml (don&#039;t add new line except when incrementing major/minor version numbers)&lt;br /&gt;
## LTS Release&lt;br /&gt;
### Change the update elements for the series with the new version number and new downloadurl and link to new archive file to extension.xml&lt;br /&gt;
## STS Release&lt;br /&gt;
### Navigate to www/core/sts&lt;br /&gt;
### Change version attribute in list_sts.xml (don&#039;t add new line except when incrementing major/minor version numbers)&lt;br /&gt;
### Change the update elements for the series with the new version number, new downloadurl and link to new archive file to extension_sts.xml, and the infourl linking to the release announcement&lt;br /&gt;
## Test auto update from prior version(s) (make sure XML files have been copied to the CDN on update.joomla.org first)&lt;br /&gt;
### All releases&lt;br /&gt;
#### Navigate to www/core/test&lt;br /&gt;
#### Change version attribute in list_test.xml (don&#039;t add new line except when incrementing major/minor version numbers)&lt;br /&gt;
### LTS&lt;br /&gt;
#### Upload patch package to this folder&lt;br /&gt;
### Change the update elements for the series with the new version number, new downloadurl and link to new archive file to extension_sts.xml, and the infourl linking to the release announcement&lt;br /&gt;
### STS&lt;br /&gt;
#### Navigate to www/core/teststs&lt;br /&gt;
#### Upload patch package to this folder&lt;br /&gt;
### Change the update elements for the series with the new version number, new downloadurl and link to new archive file to extension_sts.xml, and the infourl linking to the release announcement&lt;br /&gt;
# Update Joomla Download Portal with new release data *&lt;br /&gt;
# Publish security articles on developer site. *&lt;br /&gt;
# Publish release announcement on Joomla.org&lt;br /&gt;
# Publish announcement on the forum [Peter Martin]&lt;br /&gt;
# Update Wiki: FAQ, Version history [Mat]&lt;br /&gt;
# Post to leadership in Glip&lt;br /&gt;
# Create the Web Platform Installer packs and submit them *&lt;br /&gt;
# Add package to joomlacode.org&lt;br /&gt;
## Before the release is public, set the JoomlaCode package flags as follows: Visible=No, Public=No, Require Login=Yes.&lt;br /&gt;
## Set the Release flags as follows: Visible=Yes, Released=Yes.&lt;br /&gt;
## Once package is released, change the Package flags to Visible=Yes, Public=Yes, Require Login=No.&lt;br /&gt;
## Change the prior version package to Visible=No but leave the prior version release flags as they are.&lt;br /&gt;
&lt;br /&gt;
Note: Items with an asterisk can be skipped for non-stable releases&lt;br /&gt;
&lt;br /&gt;
=== Post-release &amp;amp; Finalization phase ===&lt;br /&gt;
# Update GitHub repo for new version development&lt;br /&gt;
## Run build/bump.php with next version&lt;br /&gt;
# Delete old release branch after confirming all commits are merged to series development head and there are no open pull requests&lt;br /&gt;
# Close security issues in security tracker&lt;br /&gt;
&lt;br /&gt;
=== Pages to update ===&lt;br /&gt;
#Global:&lt;br /&gt;
#* [https://developer.joomla.org/development-status.html Development Status]&lt;br /&gt;
#* [https://downloads.joomla.org Downloads Portal]&lt;br /&gt;
&lt;br /&gt;
=== Sites to update ===&lt;br /&gt;
#PLT Owned sites&lt;br /&gt;
#* [https://developer.joomla.org Developer Site]&lt;br /&gt;
#* [https://downloads.joomla.org Downloads Portal]&lt;br /&gt;
#* [https://api.joomla.org API Site]&lt;br /&gt;
#** Regenerate API docs for the new release via Jenkins&lt;br /&gt;
&lt;br /&gt;
=== Calculating Release Statistics ===&lt;br /&gt;
==== Using JoomlaCode and CHANGELOG ====&lt;br /&gt;
# Extract *all* issues from Tracker into spreadsheet. Make note of the date of the last release and the number of active issues at the time of the last release.&lt;br /&gt;
# Set a filter on the &amp;quot;Closed Date&amp;quot; column to be &amp;quot;after&amp;quot; &amp;quot;the day of the last release&amp;quot;. &lt;br /&gt;
#* Calculate &amp;quot;Closed&amp;quot; count by aggregating status values for Closed, Duplicate Report, Known Issue, Not a bug, Not Joomla! Core, Unable to Confirm.&lt;br /&gt;
#* Calculate &amp;quot;Fixed in SVN&amp;quot; count by aggregating status values for Open and Information Required. (Note: this value is presented two times in the report.)&lt;br /&gt;
# Set a filter on the &amp;quot;Closed Date&amp;quot; column to be blanks:&lt;br /&gt;
#* Calculate &amp;quot;Open&amp;quot; count by aggregating status values for &amp;quot;Open&amp;quot; and &amp;quot;Information Required.&amp;quot;&lt;br /&gt;
#* Calculate &amp;quot;Confirmed&amp;quot; count by aggregating status values for &amp;quot;Confirmed&amp;quot; and &amp;quot;In Progress.&amp;quot;&lt;br /&gt;
#* Calculate &amp;quot;Pending&amp;quot; count by aggregating status values for &amp;quot;Pending&amp;quot; and &amp;quot;Ready to Commit.&amp;quot;&lt;br /&gt;
# Calculate the &amp;quot;New Active Issues&amp;quot; by aggregating the &amp;quot;Open&amp;quot;, &amp;quot;Confirmed&amp;quot; and &amp;quot;Pending&amp;quot; counts.&lt;br /&gt;
# Calculate the &amp;quot;net increase/decrease&amp;quot; by subtracting the &amp;quot;Last Release Active Issues&amp;quot; from the &amp;quot;New Active Issues.&amp;quot;&lt;br /&gt;
# Count the &amp;quot;number of commits&amp;quot; by reviewing the CHANGELOG.php file and counting the documented commits.&lt;br /&gt;
&lt;br /&gt;
==== Using GitHub ====&lt;br /&gt;
# Go to https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...master where &amp;lt;version&amp;gt; is the previous release, this is GitHub&#039;s comparison view and will give stats from the previous release tag to the currently published master&lt;br /&gt;
# From this page, you can compile the number of commits, contributors, and files changed during the release period&lt;br /&gt;
&lt;br /&gt;
==== Download Statistics ====&lt;br /&gt;
# Go to http://joomlacode.org/gf/project/joomla/frs/?action=FrsReport&lt;br /&gt;
# In the filter bar, set the start date to the date of the previous release and the end date to the day before the new release&lt;br /&gt;
# The &amp;quot;Downloads By Package&amp;quot; chart is the total number of downloads for each release (i.e. 2.5.16 and 3.2.0) and includes an &amp;quot;Other&amp;quot; piece for all older version downloads&lt;br /&gt;
# The &amp;quot;Downloads By Release&amp;quot; chart separates the packages by new install and updates&lt;br /&gt;
&lt;br /&gt;
==== Alternative Method for Stats ====&lt;br /&gt;
* Fixed in SVN: Create query with close date &amp;gt; date of prior release and status = Fixed in SVN.&lt;br /&gt;
* Commits: Count from CHANGELOG.php as indicated above.&lt;br /&gt;
* New Reports: Run query with all status codes and open date &amp;gt; date of prior release.&lt;br /&gt;
* Increase / decrease in active issues: See note below&lt;br /&gt;
* Closed: Run query with closed date &amp;gt; date of prior release and status code one of Closed, Duplicate Report, Known Issue, Not a bug, Not Joomla! Core, Unable to Confirm.&lt;br /&gt;
* Open at time of release: query of all issues with status = Open or Information Required&lt;br /&gt;
* Confirmed at time of release: query of all issues with status = Confirmed or In Progress&lt;br /&gt;
* Pending at time of release: query of all issues with status = Pending or Ready to Commit&lt;br /&gt;
&lt;br /&gt;
==== Increase/Decrease in Active Issues ====&lt;br /&gt;
* Total active issues now = Open at time of release + Confirmed at time of release + Pending at time of release&lt;br /&gt;
* This number minus the total active as of prior release is the net increase or decrease&lt;br /&gt;
&lt;br /&gt;
As a check, make sure the following formula works:&lt;br /&gt;
* Prior release total active issues + New Reports - (Closed + Fixed in SVN) should equal the Total Active Issues now.&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584397</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=584397"/>
		<updated>2018-12-16T16:10:26Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Starting on new version of the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general checklist for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;This document is a work in progress.&#039;&#039; The information on this page is currently undergoing a major revision, the previous version of this document is available below as a point of reference for these revisions.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
= CMS Release Cycle =&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums] should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 3.9.1 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
- `staging`: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team&lt;br /&gt;
- `3.10-dev`: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
- `4.0-dev`: This is the release branch for the next major release (the branch&#039;s name will always be the version it represents)&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that staging is merged to the next minor branch and the next minor branch is merged to the next major branch):&lt;br /&gt;
&lt;br /&gt;
- `staging` should be merged into `3.10-dev`&lt;br /&gt;
- `3.10-dev` should be merged to `4.0-dev`&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
&lt;br /&gt;
= Old Version =&lt;br /&gt;
This is a general checklist when a version of Joomla! is released. Keep in mind that a major release differs a lot from a [[Minor Release]] or even a [[Maintenance Release]]. The checklist here describes the steps that need to be done for (at least) [[Maintenance Release]] and [[Minor Release]].&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
It depends on the [[Development Cycle]] when the checklist is triggered. A release can be done during every stage of the [[Development Cycle]], it does not matter if you release a beta or a stable version, this is a general checklist that can be used when releasing a new version of Joomla! The checklist starts when it&#039;s decided to release a version:&lt;br /&gt;
&lt;br /&gt;
=== Preparation phase ===&lt;br /&gt;
# Communication pre-release: check with PLT on timing&lt;br /&gt;
# Communication pre-release: inform Bug Squad and LT&#039;s about timing&lt;br /&gt;
# Decision: when the above has positive result, set a date and time for release&lt;br /&gt;
# [Communication pre-release: inform Global Forum Moderators about upcoming release]&lt;br /&gt;
# Communication pre-release: check availability and assign release tasks to JBS and PLT members&lt;br /&gt;
# Minimum 14 days prior to a minor release: freeze trunk for language changes&lt;br /&gt;
# Minimum 7 days prior to a patch release: freeze trunk for language changes&lt;br /&gt;
# Minimum 3 days prior to release: freeze trunk for all changes, draft release notes to translation teams, package release candidate for testing&lt;br /&gt;
# Day of release: add the new release on Joomlacode and upload the files, update web pages&lt;br /&gt;
# Announce on forum, announce to LT&#039;s&lt;br /&gt;
# [[Joomla:Release_procedure_and_checklist#Pages to update|Update specific web pages with current version data]]&lt;br /&gt;
# Contact caped crusader for updating Joomla related sites&lt;br /&gt;
# [[Joomla:Release_procedure_and_checklist#Sites to update|Update the sites]]&lt;br /&gt;
&lt;br /&gt;
=== Pre-release phase ===&lt;br /&gt;
# Apply latest installation translations (need to be delivered by translation work group Thomas Hunziker).&lt;br /&gt;
# Create pre-release package for testing.&lt;br /&gt;
# Offer pre-package to testers: [[Bug Squad]] members, [[Development Team]] members, translation members, and [https://groups.google.com/forum/#!forum/jtesters JTesters]&lt;br /&gt;
# If problems are found during this stage, go back to fix the problem. Use the [[Joomla! Maintenance Procedures]] and repeat until tests are performed successfully.&lt;br /&gt;
# Draft the release notes on Joomla.org and post draft to the [http://forum.joomla.org/viewforum.php?f=54 private translation forum].&lt;br /&gt;
# Obtain any CVE numbers needed.&lt;br /&gt;
# Draft security notices as needed and leave unpublished on [https://developer.joomla.org Joomla! Developer Network].&lt;br /&gt;
&lt;br /&gt;
=== Release phase ===&lt;br /&gt;
# Check with JSST for security fixes. *&lt;br /&gt;
# Create release notes document on joomla.org.&lt;br /&gt;
# Run the bump.php script&lt;br /&gt;
# Check language/en-GB/en-GB.files_joomla.sys.ini file for version number (not needed for minor update).&lt;br /&gt;
# Commit and tag release locally&lt;br /&gt;
# Package build by running build/build.php&lt;br /&gt;
# Packages are now in the build/tmp folder&lt;br /&gt;
# Push to GitHub&lt;br /&gt;
# If problems are found during this stage, go back to fix the problem. Use the [[Joomla! Maintenance Procedures]] and repeat until tests are performed successfully.&lt;br /&gt;
# Add package to GitHub&lt;br /&gt;
## This must be done after the version has been tagged and the tag pushed to GitHub due to how the Releases system works&lt;br /&gt;
## After pushing the tag, edit the release and attach all of the release packages to the release.&lt;br /&gt;
## Copy the description from a previous release and update for the new release.&lt;br /&gt;
# Update XML file on update.joomla.org site for the new version number information.&lt;br /&gt;
## FTP connect to update1.joomla.org and Navigate to www/core&lt;br /&gt;
## All releases&lt;br /&gt;
### Change version attribute in list.xml (don&#039;t add new line except when incrementing major/minor version numbers)&lt;br /&gt;
## LTS Release&lt;br /&gt;
### Change the update elements for the series with the new version number and new downloadurl and link to new archive file to extension.xml&lt;br /&gt;
## STS Release&lt;br /&gt;
### Navigate to www/core/sts&lt;br /&gt;
### Change version attribute in list_sts.xml (don&#039;t add new line except when incrementing major/minor version numbers)&lt;br /&gt;
### Change the update elements for the series with the new version number, new downloadurl and link to new archive file to extension_sts.xml, and the infourl linking to the release announcement&lt;br /&gt;
## Test auto update from prior version(s) (make sure XML files have been copied to the CDN on update.joomla.org first)&lt;br /&gt;
### All releases&lt;br /&gt;
#### Navigate to www/core/test&lt;br /&gt;
#### Change version attribute in list_test.xml (don&#039;t add new line except when incrementing major/minor version numbers)&lt;br /&gt;
### LTS&lt;br /&gt;
#### Upload patch package to this folder&lt;br /&gt;
### Change the update elements for the series with the new version number, new downloadurl and link to new archive file to extension_sts.xml, and the infourl linking to the release announcement&lt;br /&gt;
### STS&lt;br /&gt;
#### Navigate to www/core/teststs&lt;br /&gt;
#### Upload patch package to this folder&lt;br /&gt;
### Change the update elements for the series with the new version number, new downloadurl and link to new archive file to extension_sts.xml, and the infourl linking to the release announcement&lt;br /&gt;
# Update Joomla Download Portal with new release data *&lt;br /&gt;
# Publish security articles on developer site. *&lt;br /&gt;
# Publish release announcement on Joomla.org&lt;br /&gt;
# Publish announcement on the forum [Peter Martin]&lt;br /&gt;
# Update Wiki: FAQ, Version history [Mat]&lt;br /&gt;
# Post to leadership in Glip&lt;br /&gt;
# Create the Web Platform Installer packs and submit them *&lt;br /&gt;
# Add package to joomlacode.org&lt;br /&gt;
## Before the release is public, set the JoomlaCode package flags as follows: Visible=No, Public=No, Require Login=Yes.&lt;br /&gt;
## Set the Release flags as follows: Visible=Yes, Released=Yes.&lt;br /&gt;
## Once package is released, change the Package flags to Visible=Yes, Public=Yes, Require Login=No.&lt;br /&gt;
## Change the prior version package to Visible=No but leave the prior version release flags as they are.&lt;br /&gt;
&lt;br /&gt;
Note: Items with an asterisk can be skipped for non-stable releases&lt;br /&gt;
&lt;br /&gt;
=== Post-release &amp;amp; Finalization phase ===&lt;br /&gt;
# Update GitHub repo for new version development&lt;br /&gt;
## Run build/bump.php with next version&lt;br /&gt;
# Delete old release branch after confirming all commits are merged to series development head and there are no open pull requests&lt;br /&gt;
# Close security issues in security tracker&lt;br /&gt;
&lt;br /&gt;
=== Pages to update ===&lt;br /&gt;
#Global:&lt;br /&gt;
#* [https://developer.joomla.org/development-status.html Development Status]&lt;br /&gt;
#* [https://downloads.joomla.org Downloads Portal]&lt;br /&gt;
&lt;br /&gt;
=== Sites to update ===&lt;br /&gt;
#PLT Owned sites&lt;br /&gt;
#* [https://developer.joomla.org Developer Site]&lt;br /&gt;
#* [https://downloads.joomla.org Downloads Portal]&lt;br /&gt;
#* [https://api.joomla.org API Site]&lt;br /&gt;
#** Regenerate API docs for the new release via Jenkins&lt;br /&gt;
&lt;br /&gt;
=== Calculating Release Statistics ===&lt;br /&gt;
==== Using JoomlaCode and CHANGELOG ====&lt;br /&gt;
# Extract *all* issues from Tracker into spreadsheet. Make note of the date of the last release and the number of active issues at the time of the last release.&lt;br /&gt;
# Set a filter on the &amp;quot;Closed Date&amp;quot; column to be &amp;quot;after&amp;quot; &amp;quot;the day of the last release&amp;quot;. &lt;br /&gt;
#* Calculate &amp;quot;Closed&amp;quot; count by aggregating status values for Closed, Duplicate Report, Known Issue, Not a bug, Not Joomla! Core, Unable to Confirm.&lt;br /&gt;
#* Calculate &amp;quot;Fixed in SVN&amp;quot; count by aggregating status values for Open and Information Required. (Note: this value is presented two times in the report.)&lt;br /&gt;
# Set a filter on the &amp;quot;Closed Date&amp;quot; column to be blanks:&lt;br /&gt;
#* Calculate &amp;quot;Open&amp;quot; count by aggregating status values for &amp;quot;Open&amp;quot; and &amp;quot;Information Required.&amp;quot;&lt;br /&gt;
#* Calculate &amp;quot;Confirmed&amp;quot; count by aggregating status values for &amp;quot;Confirmed&amp;quot; and &amp;quot;In Progress.&amp;quot;&lt;br /&gt;
#* Calculate &amp;quot;Pending&amp;quot; count by aggregating status values for &amp;quot;Pending&amp;quot; and &amp;quot;Ready to Commit.&amp;quot;&lt;br /&gt;
# Calculate the &amp;quot;New Active Issues&amp;quot; by aggregating the &amp;quot;Open&amp;quot;, &amp;quot;Confirmed&amp;quot; and &amp;quot;Pending&amp;quot; counts.&lt;br /&gt;
# Calculate the &amp;quot;net increase/decrease&amp;quot; by subtracting the &amp;quot;Last Release Active Issues&amp;quot; from the &amp;quot;New Active Issues.&amp;quot;&lt;br /&gt;
# Count the &amp;quot;number of commits&amp;quot; by reviewing the CHANGELOG.php file and counting the documented commits.&lt;br /&gt;
&lt;br /&gt;
==== Using GitHub ====&lt;br /&gt;
# Go to https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...master where &amp;lt;version&amp;gt; is the previous release, this is GitHub&#039;s comparison view and will give stats from the previous release tag to the currently published master&lt;br /&gt;
# From this page, you can compile the number of commits, contributors, and files changed during the release period&lt;br /&gt;
&lt;br /&gt;
==== Download Statistics ====&lt;br /&gt;
# Go to http://joomlacode.org/gf/project/joomla/frs/?action=FrsReport&lt;br /&gt;
# In the filter bar, set the start date to the date of the previous release and the end date to the day before the new release&lt;br /&gt;
# The &amp;quot;Downloads By Package&amp;quot; chart is the total number of downloads for each release (i.e. 2.5.16 and 3.2.0) and includes an &amp;quot;Other&amp;quot; piece for all older version downloads&lt;br /&gt;
# The &amp;quot;Downloads By Release&amp;quot; chart separates the packages by new install and updates&lt;br /&gt;
&lt;br /&gt;
==== Alternative Method for Stats ====&lt;br /&gt;
* Fixed in SVN: Create query with close date &amp;gt; date of prior release and status = Fixed in SVN.&lt;br /&gt;
* Commits: Count from CHANGELOG.php as indicated above.&lt;br /&gt;
* New Reports: Run query with all status codes and open date &amp;gt; date of prior release.&lt;br /&gt;
* Increase / decrease in active issues: See note below&lt;br /&gt;
* Closed: Run query with closed date &amp;gt; date of prior release and status code one of Closed, Duplicate Report, Known Issue, Not a bug, Not Joomla! Core, Unable to Confirm.&lt;br /&gt;
* Open at time of release: query of all issues with status = Open or Information Required&lt;br /&gt;
* Confirmed at time of release: query of all issues with status = Confirmed or In Progress&lt;br /&gt;
* Pending at time of release: query of all issues with status = Pending or Ready to Commit&lt;br /&gt;
&lt;br /&gt;
==== Increase/Decrease in Active Issues ====&lt;br /&gt;
* Total active issues now = Open at time of release + Confirmed at time of release + Pending at time of release&lt;br /&gt;
* This number minus the total active as of prior release is the net increase or decrease&lt;br /&gt;
&lt;br /&gt;
As a check, make sure the following formula works:&lt;br /&gt;
* Prior release total active issues + New Reports - (Closed + Fixed in SVN) should equal the Total Active Issues now.&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Integrate_Extensions_with_the_Privacy_Component&amp;diff=512139</id>
		<title>J3.x:Integrate Extensions with the Privacy Component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Integrate_Extensions_with_the_Privacy_Component&amp;diff=512139"/>
		<updated>2018-09-04T23:26:41Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Fill in removal processing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The information below is provided to extension developers to help create integrations with the [[S:MyLanguage/J3.x:Privacy|Privacy Tool Suite]].&lt;br /&gt;
&lt;br /&gt;
== Privacy Related Extension Capabilities ==&lt;br /&gt;
&lt;br /&gt;
The new privacy component has a &#039;&#039;&#039;Capabilities&#039;&#039;&#039; section which allows extensions to report privacy related capabilities.  The aim for this section is to help users to understand what an extension may do related to personal data on users and help site owners plan accordingly.  For details on this section, including how a plugin should integrate with it, please see the [[S:MyLanguage/J3.x:Report_Extension_Capabilities_in_Privacy_Component|Report Extension Capabilities in Privacy Component]] page.&lt;br /&gt;
&lt;br /&gt;
== Check for a Published Privacy Policy ==&lt;br /&gt;
&lt;br /&gt;
The privacy component&#039;s health check notifies users if there is a privacy policy published on the website.  This check is performed by the &amp;lt;tt&amp;gt;onPrivacyCheckPrivacyPolicyPublished&amp;lt;/tt&amp;gt; event which can be subscribed to by plugins in the privacy, system, and user plugin groups.  The event receives an associative array by reference with two keys as its argument:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;published&amp;quot; - A boolean value indicating that there is a published policy&lt;br /&gt;
* &amp;quot;editLink&amp;quot; - The URL to edit the policy item, this is displayed if there is a privacy policy published&lt;br /&gt;
&lt;br /&gt;
As a best practice, it is suggested that plugins first check if the &amp;quot;published&amp;quot; flag is already set to true and not make further changes to the data array if so.  Note that the &#039;&#039;&#039;System - Privacy Consent&#039;&#039;&#039; core plugin will process this event.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function onPrivacyCheckPrivacyPolicyPublished(&amp;amp;$policy)&lt;br /&gt;
{&lt;br /&gt;
	// If another plugin has already indicated a policy is published, we won&#039;t change anything here&lt;br /&gt;
	if ($policy[&#039;published&#039;])&lt;br /&gt;
	{&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Do stuff to find the privacy policy data&lt;br /&gt;
&lt;br /&gt;
	$policy[&#039;published&#039;] = true;&lt;br /&gt;
	$policy[&#039;editLink&#039;]  = &#039;&#039;; // The link to the item&#039;s edit page, processed through JRoute, i.e. JRoute::_(&#039;index.php?option=com_content&amp;amp;task=article.edit&amp;amp;id=1&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Add Data to Export Requests ==&lt;br /&gt;
&lt;br /&gt;
As a convenience, there are several helper methods in the &amp;lt;tt&amp;gt;PrivacyPlugin&amp;lt;/tt&amp;gt; class and it is recommended that privacy plugins extend this class to inherit those helpers (this is similar to the &amp;lt;tt&amp;gt;FinderIndexerAdapter&amp;lt;/tt&amp;gt; class for Smart Search plugins as an example).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
JLoader::register(&#039;PrivacyPlugin&#039;, JPATH_ADMINISTRATOR . &#039;/components/com_privacy/helpers/plugin.php&#039;);&lt;br /&gt;
&lt;br /&gt;
class PlgPrivacyContent extends PrivacyPlugin {}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To add data to an export request, a plugin in the privacy or system plugin groups must subscribe to the &amp;lt;tt&amp;gt;onPrivacyExportRequest&amp;lt;/tt&amp;gt; event.&lt;br /&gt;
&lt;br /&gt;
The event receives two arguments:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;$request&amp;lt;/tt&amp;gt; - A &amp;lt;tt&amp;gt;PrivacyTableRequest&amp;lt;/tt&amp;gt; object containing the information request record from the database&lt;br /&gt;
* &amp;lt;tt&amp;gt;$user&amp;lt;/tt&amp;gt; - If there is an account for the email address of the information request, a &amp;lt;tt&amp;gt;Joomla\CMS\User\User&amp;lt;/tt&amp;gt; object is given containing the user account data&lt;br /&gt;
&lt;br /&gt;
The event must return an array of &amp;lt;tt&amp;gt;PrivacyExportDomain&amp;lt;/tt&amp;gt; objects containing the data to be exported for a given domain.  If the plugin has no data, it must return an empty array.&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;tt&amp;gt;PrivacyExportDomain&amp;lt;/tt&amp;gt; data object typically represents the data found from a table in the database and is made up of three elements:&lt;br /&gt;
&lt;br /&gt;
* Domain name - A name to identify the domain&lt;br /&gt;
* Domain description - A short description of the data contained in the domain&lt;br /&gt;
* Domain items - An array of &amp;lt;tt&amp;gt;PrivacyExportItem&amp;lt;/tt&amp;gt; data objects containing all items within the domain&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;tt&amp;gt;PrivacyExportItem&amp;lt;/tt&amp;gt; data object represents a single item within the data domain and is made up of two elements:&lt;br /&gt;
&lt;br /&gt;
* Item ID - The primary identifier for this item within the domain, typically this will be the database record&#039;s primary key&lt;br /&gt;
* Item fields - An array of &amp;lt;tt&amp;gt;PrivacyExportField&amp;lt;/tt&amp;gt; data objects containing each field for the item&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;PrivacyExportField&amp;lt;/tt&amp;gt; data object represents a single field within an item and is made up of two elements:&lt;br /&gt;
&lt;br /&gt;
* Field name - The name of the field&lt;br /&gt;
* Field value - The field&#039;s value&lt;br /&gt;
&lt;br /&gt;
The general workflow for the export process is this:&lt;br /&gt;
&lt;br /&gt;
* Validate the plugin should actually process data&lt;br /&gt;
* Query the data from the database&lt;br /&gt;
* Create a domain for the results (the &amp;lt;tt&amp;gt;createDomain&amp;lt;/tt&amp;gt; method inherited from the &amp;lt;tt&amp;gt;PrivacyPlugin&amp;lt;/tt&amp;gt; class can help with this)&lt;br /&gt;
* Add items for each row&lt;br /&gt;
** The &amp;lt;tt&amp;gt;createItemFromArray&amp;lt;/tt&amp;gt; method inherited from the &amp;lt;tt&amp;gt;PrivacyPlugin&amp;lt;/tt&amp;gt; class can be used to create a &amp;lt;tt&amp;gt;PrivacyExportItem&amp;lt;/tt&amp;gt; object from an array (this should be used in conjunction with the database&#039;s &amp;lt;tt&amp;gt;loadAssocList&amp;lt;/tt&amp;gt; method&lt;br /&gt;
** The &amp;lt;tt&amp;gt;createItemForTable&amp;lt;/tt&amp;gt; method inherited from the &amp;lt;tt&amp;gt;PrivacyPlugin&amp;lt;/tt&amp;gt; class can be used to create a &amp;lt;tt&amp;gt;PrivacyExportItem&amp;lt;/tt&amp;gt; object from a &amp;lt;tt&amp;gt;Joomla\CMS\Table\Table&amp;lt;/tt&amp;gt; object&lt;br /&gt;
* Return the domain&lt;br /&gt;
&lt;br /&gt;
Below is an example for exporting articles created by a user, including custom field data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
use Joomla\CMS\User\User;&lt;br /&gt;
&lt;br /&gt;
JLoader::register(&#039;FieldsHelper&#039;, JPATH_ADMINISTRATOR . &#039;/components/com_fields/helpers/fields.php&#039;);&lt;br /&gt;
JLoader::register(&#039;PrivacyPlugin&#039;, JPATH_ADMINISTRATOR . &#039;/components/com_privacy/helpers/plugin.php&#039;);&lt;br /&gt;
&lt;br /&gt;
class PlgPrivacyContent extends PrivacyPlugin&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * @var  JDatabaseDriver&lt;br /&gt;
	 */&lt;br /&gt;
	protected $db;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @var  array&lt;br /&gt;
	 */&lt;br /&gt;
	protected $contents = array();&lt;br /&gt;
&lt;br /&gt;
	public function onPrivacyExportRequest(PrivacyTableRequest $request, User $user = null)&lt;br /&gt;
	{&lt;br /&gt;
		// This plugin only processes data for registered user accounts&lt;br /&gt;
		if (!$user)&lt;br /&gt;
		{&lt;br /&gt;
			return array();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$domains   = array();&lt;br /&gt;
		$domains[] = $this-&amp;gt;createContentDomain($user);&lt;br /&gt;
&lt;br /&gt;
		// Create domains for each article&#039;s custom fields&lt;br /&gt;
		foreach ($this-&amp;gt;contents as $content)&lt;br /&gt;
		{&lt;br /&gt;
			$domains[] = $this-&amp;gt;createContentCustomFieldsDomain($content);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return $domains;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	private function createContentDomain(User $user)&lt;br /&gt;
	{&lt;br /&gt;
		$domain = $this-&amp;gt;createDomain(&#039;user content&#039;, &#039;Joomla! user content data&#039;);&lt;br /&gt;
&lt;br /&gt;
		$query = $this-&amp;gt;db-&amp;gt;getQuery(true)&lt;br /&gt;
			-&amp;gt;select(&#039;*&#039;)&lt;br /&gt;
			-&amp;gt;from($this-&amp;gt;db-&amp;gt;quoteName(&#039;#__content&#039;))&lt;br /&gt;
			-&amp;gt;where($this-&amp;gt;db-&amp;gt;quoteName(&#039;created_by&#039;) . &#039; = &#039; . (int) $user-&amp;gt;id)&lt;br /&gt;
			-&amp;gt;order($this-&amp;gt;db-&amp;gt;quoteName(&#039;ordering&#039;) . &#039; ASC&#039;);&lt;br /&gt;
&lt;br /&gt;
		$items = $this-&amp;gt;db-&amp;gt;setQuery($query)-&amp;gt;loadAssocList();&lt;br /&gt;
&lt;br /&gt;
		// Add each article to the domain&lt;br /&gt;
		foreach ($items as $item)&lt;br /&gt;
		{&lt;br /&gt;
			$domain-&amp;gt;addItem($this-&amp;gt;createItemFromArray($item));&lt;br /&gt;
&lt;br /&gt;
			// Store the article for use in the custom fields processing&lt;br /&gt;
			$this-&amp;gt;contents[] = (object) $item;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return $domain;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	private function createContentCustomFieldsDomain($content)&lt;br /&gt;
	{&lt;br /&gt;
		$domain = $this-&amp;gt;createDomain(&#039;content custom fields&#039;, &#039;Joomla! content custom fields data&#039;);&lt;br /&gt;
&lt;br /&gt;
		// Get item&#039;s fields, also preparing their value property for manual display&lt;br /&gt;
		$fields = FieldsHelper::getFields(&#039;com_content.article&#039;, $content);&lt;br /&gt;
&lt;br /&gt;
		foreach ($fields as $field)&lt;br /&gt;
		{&lt;br /&gt;
			$fieldValue = is_array($field-&amp;gt;value) ? implode(&#039;, &#039;, $field-&amp;gt;value) : $field-&amp;gt;value;&lt;br /&gt;
&lt;br /&gt;
			$data = array(&lt;br /&gt;
				&#039;content_id&#039;  =&amp;gt; $content-&amp;gt;id,&lt;br /&gt;
				&#039;field_name&#039;  =&amp;gt; $field-&amp;gt;name,&lt;br /&gt;
				&#039;field_title&#039; =&amp;gt; $field-&amp;gt;title,&lt;br /&gt;
				&#039;field_value&#039; =&amp;gt; $fieldValue,&lt;br /&gt;
			);&lt;br /&gt;
&lt;br /&gt;
			$domain-&amp;gt;addItem($this-&amp;gt;createItemFromArray($data));&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return $domain;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Process Removal Requests ==&lt;br /&gt;
&lt;br /&gt;
Processing a removal request requires two steps: Validating that the subject&#039;s data can be removed, and the actual removal. Again it is suggested that plugins extend the &amp;lt;tt&amp;gt;PrivacyPlugin&amp;lt;/tt&amp;gt; class, however this is not a strict requirement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
JLoader::register(&#039;PrivacyPlugin&#039;, JPATH_ADMINISTRATOR . &#039;/components/com_privacy/helpers/plugin.php&#039;);&lt;br /&gt;
&lt;br /&gt;
class PlgPrivacyUser extends PrivacyPlugin {}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Validate Data Can Be Removed ===&lt;br /&gt;
&lt;br /&gt;
If the plugin may need to block a subject&#039;s data from being removed, it must subscribe to the &amp;lt;tt&amp;gt;onPrivacyCanRemoveData&amp;lt;/tt&amp;gt; event. Generally, a removal should be blocked if there are valid legal reasons to retain the data or if removal may cause permanent damage to the site (for example, the core &#039;&#039;&#039;Privacy - User Accounts&#039;&#039;&#039; prohibits removing a super user account).&lt;br /&gt;
&lt;br /&gt;
The event receives two arguments:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;$request&amp;lt;/tt&amp;gt; - A &amp;lt;tt&amp;gt;PrivacyTableRequest&amp;lt;/tt&amp;gt; object containing the information request record from the database&lt;br /&gt;
* &amp;lt;tt&amp;gt;$user&amp;lt;/tt&amp;gt; - If there is an account for the email address of the information request, a &amp;lt;tt&amp;gt;Joomla\CMS\User\User&amp;lt;/tt&amp;gt; object is given containing the user account data&lt;br /&gt;
&lt;br /&gt;
The event must return a &amp;lt;tt&amp;gt;PrivacyRemovalStatus&amp;lt;/tt&amp;gt; data object which specifies if the data cannot be removed and a reason for the inability to remove the data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
use Joomla\CMS\Language\Text;&lt;br /&gt;
use Joomla\CMS\User\User;&lt;br /&gt;
&lt;br /&gt;
JLoader::register(&#039;PrivacyPlugin&#039;, JPATH_ADMINISTRATOR . &#039;/components/com_privacy/helpers/plugin.php&#039;);&lt;br /&gt;
JLoader::register(&#039;PrivacyRemovalStatus&#039;, JPATH_ADMINISTRATOR . &#039;/components/com_privacy/helpers/removal/status.php&#039;);&lt;br /&gt;
&lt;br /&gt;
class PlgPrivacyUser extends PrivacyPlugin&lt;br /&gt;
{&lt;br /&gt;
	public function onPrivacyCanRemoveData(PrivacyTableRequest $request, User $user = null)&lt;br /&gt;
	{&lt;br /&gt;
		$status = new PrivacyRemovalStatus;&lt;br /&gt;
&lt;br /&gt;
		// We only need to check if there is an associated user account&lt;br /&gt;
		if (!$user)&lt;br /&gt;
		{&lt;br /&gt;
			return $status;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// We will not remove a super user account from the site&lt;br /&gt;
		if ($user-&amp;gt;authorise(&#039;core.admin&#039;))&lt;br /&gt;
		{&lt;br /&gt;
			$status-&amp;gt;canRemove = false;&lt;br /&gt;
			$status-&amp;gt;reason    = Text::_(&#039;PLG_PRIVACY_USER_ERROR_CANNOT_REMOVE_SUPER_USER&#039;);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return $status;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Remove or Anonymize Data ===&lt;br /&gt;
&lt;br /&gt;
If the plugin handles the removal or anonymization of data, it must subscribe to the &amp;lt;tt&amp;gt;onPrivacyRemoveData&amp;lt;/tt&amp;gt; event.&lt;br /&gt;
&lt;br /&gt;
The event receives two arguments:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;$request&amp;lt;/tt&amp;gt; - A &amp;lt;tt&amp;gt;PrivacyTableRequest&amp;lt;/tt&amp;gt; object containing the information request record from the database&lt;br /&gt;
* &amp;lt;tt&amp;gt;$user&amp;lt;/tt&amp;gt; - If there is an account for the email address of the information request, a &amp;lt;tt&amp;gt;Joomla\CMS\User\User&amp;lt;/tt&amp;gt; object is given containing the user account data&lt;br /&gt;
&lt;br /&gt;
Unlike the other events in this component, plugins are not expected to return any data.&lt;br /&gt;
&lt;br /&gt;
Depending on the underlying data&#039;s requirements, plugins should anonymize information that is retained and remove any data that is no longer necessary. If necessary, the plugin may perform other actions related to the request and/or user account.&lt;br /&gt;
&lt;br /&gt;
The below example demonstrates how Joomla anonymizes and removes data related to the core user account.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
use Joomla\CMS\Factory;&lt;br /&gt;
use Joomla\CMS\User\User;&lt;br /&gt;
&lt;br /&gt;
JLoader::register(&#039;PrivacyPlugin&#039;, JPATH_ADMINISTRATOR . &#039;/components/com_privacy/helpers/plugin.php&#039;);&lt;br /&gt;
&lt;br /&gt;
class PlgPrivacyUser extends PrivacyPlugin&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * @var  JDatabaseDriver&lt;br /&gt;
	 */&lt;br /&gt;
	protected $db;&lt;br /&gt;
&lt;br /&gt;
	public function onPrivacyRemoveData(PrivacyTableRequest $request, User $user = null)&lt;br /&gt;
	{&lt;br /&gt;
		// This plugin only processes data for registered user accounts&lt;br /&gt;
		if (!$user)&lt;br /&gt;
		{&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$pseudoanonymisedData = array(&lt;br /&gt;
			&#039;name&#039;      =&amp;gt; &#039;User ID &#039; . $user-&amp;gt;id,&lt;br /&gt;
			&#039;username&#039;  =&amp;gt; bin2hex(random_bytes(12)), // Generates a random username&lt;br /&gt;
			&#039;email&#039;     =&amp;gt; &#039;UserID&#039; . $user-&amp;gt;id . &#039;removed@email.invalid&#039;,&lt;br /&gt;
			&#039;block&#039;     =&amp;gt; true,&lt;br /&gt;
		);&lt;br /&gt;
&lt;br /&gt;
		$user-&amp;gt;bind($pseudoanonymisedData);&lt;br /&gt;
&lt;br /&gt;
		$user-&amp;gt;save();&lt;br /&gt;
&lt;br /&gt;
		// Destroy all sessions for the user account&lt;br /&gt;
		$sessionIds = $this-&amp;gt;db-&amp;gt;setQuery(&lt;br /&gt;
			$this-&amp;gt;db-&amp;gt;getQuery(true)&lt;br /&gt;
				-&amp;gt;select($this-&amp;gt;db-&amp;gt;quoteName(&#039;session_id&#039;))&lt;br /&gt;
				-&amp;gt;from($this-&amp;gt;db-&amp;gt;quoteName(&#039;#__session&#039;))&lt;br /&gt;
				-&amp;gt;where($this-&amp;gt;db-&amp;gt;quoteName(&#039;userid&#039;) . &#039; = &#039; . (int) $user-&amp;gt;id)&lt;br /&gt;
		)-&amp;gt;loadColumn();&lt;br /&gt;
&lt;br /&gt;
		// If there aren&#039;t any active sessions then there&#039;s nothing to do here&lt;br /&gt;
		if (empty($sessionIds))&lt;br /&gt;
		{&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$storeName = Factory::getConfig()-&amp;gt;get(&#039;session_handler&#039;, &#039;none&#039;);&lt;br /&gt;
		$store     = JSessionStorage::getInstance($storeName);&lt;br /&gt;
		$quotedIds = array();&lt;br /&gt;
&lt;br /&gt;
		// Destroy the sessions and quote the IDs to purge the session table&lt;br /&gt;
		foreach ($sessionIds as $sessionId)&lt;br /&gt;
		{&lt;br /&gt;
			$store-&amp;gt;destroy($sessionId);&lt;br /&gt;
			$quotedIds[] = $this-&amp;gt;db-&amp;gt;quote($sessionId);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$this-&amp;gt;db-&amp;gt;setQuery(&lt;br /&gt;
			$this-&amp;gt;db-&amp;gt;getQuery(true)&lt;br /&gt;
				-&amp;gt;delete($this-&amp;gt;db-&amp;gt;quoteName(&#039;#__session&#039;))&lt;br /&gt;
				-&amp;gt;where($this-&amp;gt;db-&amp;gt;quoteName(&#039;session_id&#039;) . &#039; IN (&#039; . implode(&#039;, &#039;, $quotedIds) . &#039;)&#039;)&lt;br /&gt;
		)-&amp;gt;execute();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy]]&lt;br /&gt;
[[Category:Components]]&lt;br /&gt;
[[Category:Joomla! 3.9]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506908</id>
		<title>J3.x:Information Request Workflow in Privacy Component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506908"/>
		<updated>2018-08-29T02:54:20Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: /* Additional Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Information requests are the central element to the privacy component and processing user requests for their data to be exported or removed from a site.&lt;br /&gt;
&lt;br /&gt;
== Creating a Request ==&lt;br /&gt;
&lt;br /&gt;
A request can be created either by a super user for the website or an authenticated user through the request form.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;IMPORTANT&#039;&#039; To create and process information requests, your website MUST be able to send emails due to the requirement for the information owner to confirm the request.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
=== Super User Creation ===&lt;br /&gt;
&lt;br /&gt;
Through the &#039;&#039;&#039;Privacy: Information Requests&#039;&#039;&#039; screen, any super user may create a new information request.  This is the only way to create information requests for users who do NOT have accounts on the website.  To create a request, the super user must specify:&lt;br /&gt;
&lt;br /&gt;
* The email address of the user for whom to process data&lt;br /&gt;
* The request type (export or remove)&lt;br /&gt;
&lt;br /&gt;
Note: In this context, a user means any individual or organization who has made a request, regardless of whether there is a registered user account on the site for a user (as an example, this would allow the tool suite to process requests for sites which have a commenting system which allows guests to comment by providing a name and/or email address without requiring to be registered on the site).&lt;br /&gt;
&lt;br /&gt;
=== Authenticated User Request ===&lt;br /&gt;
&lt;br /&gt;
Registered users may submit information requests for their accounts on the website.  It is suggested to create a &#039;&#039;&#039;Privacy &amp;gt; Create Request&#039;&#039;&#039; menu item to link to the information request form.  When submitting an information request, the user must provide:&lt;br /&gt;
&lt;br /&gt;
* Their email address&lt;br /&gt;
* The request type (export or remove)&lt;br /&gt;
&lt;br /&gt;
== Confirming a Request ==&lt;br /&gt;
&lt;br /&gt;
Once a request has been created, regardless of how it is created, the user must confirm that this is a valid request for their information. They will receive an email from the website alerting them to the request&#039;s creation and be provided a link to a confirmation form where they will need to enter the token provided in the email and their email address to confirm the request&#039;s validity. Once the user confirms the request, it will be marked as &#039;&#039;&#039;Confirmed&#039;&#039;&#039; in the component&#039;s requests list and the site&#039;s super user(s) will be able to process it.&lt;br /&gt;
&lt;br /&gt;
The token in this email is valid for 24 hours. If a request is not confirmed in that timeframe, the request will be marked as &#039;&#039;&#039;Invalid&#039;&#039;&#039; in the component&#039;s requests list and a new request must be submitted.&lt;br /&gt;
&lt;br /&gt;
It is suggested to create a hidden &#039;&#039;&#039;Privacy &amp;gt; Confirm Request&#039;&#039;&#039; menu item in order to provide a SEF URL for this page, however this is not required.&lt;br /&gt;
&lt;br /&gt;
== Processing a Request ==&lt;br /&gt;
&lt;br /&gt;
=== Export Request ===&lt;br /&gt;
&lt;br /&gt;
[[File:Info Request Export-en.png|600px|none]]&lt;br /&gt;
Once an export request has been confirmed, there are two actions available to super users.&lt;br /&gt;
&lt;br /&gt;
* Export Data: This will collect all data for the information request&#039;s subject and create a XML file that will be downloaded to your computer.  This is useful to enable site owners to review the data export prior to sending it to the user.&lt;br /&gt;
* Email Data Export: This will collect all data for the information request&#039;s subject, create a XML file (the same as generated by the Export Data action), and send an email to the user with the exported data file attached.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Important&#039;&#039; The export action can only process data from supported extensions. Therefore, the super user who is acting on the request should review the export and if necessary include data that was not processed from extensions.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
=== Removal Request ===&lt;br /&gt;
&lt;br /&gt;
[[File:Info Request Remove-en.png|600px|none]]&lt;br /&gt;
Once a remove request has been confirmed, there is one action available to super users.&lt;br /&gt;
&lt;br /&gt;
* Delete Data: This process will anonymize and/or remove data related to the information subject. For requests where the information owner also has a registered user account, this process will anonymize the account&#039;s name, username, and email address, as well as block the account from being logged into and log the user out of the site if they are logged in at the time the request is processed.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Important&#039;&#039; The delete action can only process data from supported extensions. Therefore, the super user who is acting on the request should review the site after the removal is completed and if necessary manually anonymize or remove data that was not processed from extensions.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
== Completing a Request ==&lt;br /&gt;
&lt;br /&gt;
After the request has been processed, the request should be marked as completed. This will indicate that the request has been fulfilled and there is no further action to be taken.&lt;br /&gt;
&lt;br /&gt;
== Additional Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[S:MyLanguage/J3.x:Integrate_Extensions_with_the_Privacy_Component|Developer&#039;s Guide for the Privacy Tool Suite]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy{{#translation:}}]]&lt;br /&gt;
[[Category:Components{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla! 3.9{{#translation:}}]]&lt;br /&gt;
[[Category:Plugins{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Integrate_Extensions_with_the_Privacy_Component&amp;diff=506907</id>
		<title>J3.x:Integrate Extensions with the Privacy Component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Integrate_Extensions_with_the_Privacy_Component&amp;diff=506907"/>
		<updated>2018-08-29T02:34:53Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The information below is provided to extension developers to help create integrations with the [[S:MyLanguage/J3.x:Privacy|Privacy Tool Suite]].&lt;br /&gt;
&lt;br /&gt;
== Privacy Related Extension Capabilities ==&lt;br /&gt;
&lt;br /&gt;
The new privacy component has a &#039;&#039;&#039;Capabilities&#039;&#039;&#039; section which allows extensions to report privacy related capabilities.  The aim for this section is to help users to understand what an extension may do related to personal data on users and help site owners plan accordingly.  For details on this section, including how a plugin should integrate with it, please see the [[S:MyLanguage/J3.x:Report_Extension_Capabilities_in_Privacy_Component|Report Extension Capabilities in Privacy Component]] page.&lt;br /&gt;
&lt;br /&gt;
== Check for a Published Privacy Policy ==&lt;br /&gt;
&lt;br /&gt;
The privacy component&#039;s health check notifies users if there is a privacy policy published on the website.  This check is performed by the &amp;lt;tt&amp;gt;onPrivacyCheckPrivacyPolicyPublished&amp;lt;/tt&amp;gt; event which can be subscribed to by plugins in the privacy, system, and user plugin groups.  The event receives an associative array by reference with two keys as its argument:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;published&amp;quot; - A boolean value indicating that there is a published policy&lt;br /&gt;
* &amp;quot;editLink&amp;quot; - The URL to edit the policy item, this is displayed if there is a privacy policy published&lt;br /&gt;
&lt;br /&gt;
As a best practice, it is suggested that plugins first check if the &amp;quot;published&amp;quot; flag is already set to true and not make further changes to the data array if so.  Note that the &#039;&#039;&#039;System - Privacy Consent&#039;&#039;&#039; core plugin will process this event.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function onPrivacyCheckPrivacyPolicyPublished(&amp;amp;$policy)&lt;br /&gt;
{&lt;br /&gt;
	// If another plugin has already indicated a policy is published, we won&#039;t change anything here&lt;br /&gt;
	if ($policy[&#039;published&#039;])&lt;br /&gt;
	{&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Do stuff to find the privacy policy data&lt;br /&gt;
&lt;br /&gt;
	$policy[&#039;published&#039;] = true;&lt;br /&gt;
	$policy[&#039;editLink&#039;]  = &#039;&#039;; // The link to the item&#039;s edit page, processed through JRoute, i.e. JRoute::_(&#039;index.php?option=com_content&amp;amp;task=article.edit&amp;amp;id=1&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Add Data to Export Requests ==&lt;br /&gt;
&lt;br /&gt;
As a convenience, there are several helper methods in the &amp;lt;tt&amp;gt;PrivacyPlugin&amp;lt;/tt&amp;gt; class and it is recommended that privacy plugins extend this class to inherit those helpers (this is similar to the &amp;lt;tt&amp;gt;FinderIndexerAdapter&amp;lt;/tt&amp;gt; class for Smart Search plugins as an example).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
JLoader::register(&#039;PrivacyPlugin&#039;, JPATH_ADMINISTRATOR . &#039;/components/com_privacy/helpers/plugin.php&#039;);&lt;br /&gt;
&lt;br /&gt;
class PlgPrivacyContent extends PrivacyPlugin {}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To add data to an export request, a plugin in the privacy or system plugin groups must subscribe to the &amp;lt;tt&amp;gt;onPrivacyExportRequest&amp;lt;/tt&amp;gt; event.&lt;br /&gt;
&lt;br /&gt;
The event receives two arguments:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;$request&amp;lt;/tt&amp;gt; - A &amp;lt;tt&amp;gt;PrivacyTableRequest&amp;lt;/tt&amp;gt; object containing the information request record from the database&lt;br /&gt;
* &amp;lt;tt&amp;gt;$user&amp;lt;/tt&amp;gt; - If there is an account for the email address of the information request, a &amp;lt;tt&amp;gt;Joomla\CMS\User\User&amp;lt;/tt&amp;gt; object is given containing the user account data&lt;br /&gt;
&lt;br /&gt;
The event must return an array of &amp;lt;tt&amp;gt;PrivacyExportDomain&amp;lt;/tt&amp;gt; objects containing the data to be exported for a given domain.  If the plugin has no data, it must return an empty array.&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;tt&amp;gt;PrivacyExportDomain&amp;lt;/tt&amp;gt; data object typically represents the data found from a table in the database and is made up of three elements:&lt;br /&gt;
&lt;br /&gt;
* Domain name - A name to identify the domain&lt;br /&gt;
* Domain description - A short description of the data contained in the domain&lt;br /&gt;
* Domain items - An array of &amp;lt;tt&amp;gt;PrivacyExportItem&amp;lt;/tt&amp;gt; data objects containing all items within the domain&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;tt&amp;gt;PrivacyExportItem&amp;lt;/tt&amp;gt; data object represents a single item within the data domain and is made up of two elements:&lt;br /&gt;
&lt;br /&gt;
* Item ID - The primary identifier for this item within the domain, typically this will be the database record&#039;s primary key&lt;br /&gt;
* Item fields - An array of &amp;lt;tt&amp;gt;PrivacyExportField&amp;lt;/tt&amp;gt; data objects containing each field for the item&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;PrivacyExportField&amp;lt;/tt&amp;gt; data object represents a single field within an item and is made up of two elements:&lt;br /&gt;
&lt;br /&gt;
* Field name - The name of the field&lt;br /&gt;
* Field value - The field&#039;s value&lt;br /&gt;
&lt;br /&gt;
The general workflow for the export process is this:&lt;br /&gt;
&lt;br /&gt;
* Validate the plugin should actually process data&lt;br /&gt;
* Query the data from the database&lt;br /&gt;
* Create a domain for the results (the &amp;lt;tt&amp;gt;createDomain&amp;lt;/tt&amp;gt; method inherited from the &amp;lt;tt&amp;gt;PrivacyPlugin&amp;lt;/tt&amp;gt; class can help with this)&lt;br /&gt;
* Add items for each row&lt;br /&gt;
** The &amp;lt;tt&amp;gt;createItemFromArray&amp;lt;/tt&amp;gt; method inherited from the &amp;lt;tt&amp;gt;PrivacyPlugin&amp;lt;/tt&amp;gt; class can be used to create a &amp;lt;tt&amp;gt;PrivacyExportItem&amp;lt;/tt&amp;gt; object from an array (this should be used in conjunction with the database&#039;s &amp;lt;tt&amp;gt;loadAssocList&amp;lt;/tt&amp;gt; method&lt;br /&gt;
** The &amp;lt;tt&amp;gt;createItemForTable&amp;lt;/tt&amp;gt; method inherited from the &amp;lt;tt&amp;gt;PrivacyPlugin&amp;lt;/tt&amp;gt; class can be used to create a &amp;lt;tt&amp;gt;PrivacyExportItem&amp;lt;/tt&amp;gt; object from a &amp;lt;tt&amp;gt;Joomla\CMS\Table\Table&amp;lt;/tt&amp;gt; object&lt;br /&gt;
* Return the domain&lt;br /&gt;
&lt;br /&gt;
Below is an example for exporting articles created by a user, including custom field data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
use Joomla\CMS\User\User;&lt;br /&gt;
&lt;br /&gt;
JLoader::register(&#039;FieldsHelper&#039;, JPATH_ADMINISTRATOR . &#039;/components/com_fields/helpers/fields.php&#039;);&lt;br /&gt;
JLoader::register(&#039;PrivacyPlugin&#039;, JPATH_ADMINISTRATOR . &#039;/components/com_privacy/helpers/plugin.php&#039;);&lt;br /&gt;
&lt;br /&gt;
class PlgPrivacyContent extends PrivacyPlugin&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * @var  JDatabaseDriver&lt;br /&gt;
	 */&lt;br /&gt;
	protected $db;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @var  array&lt;br /&gt;
	 */&lt;br /&gt;
	protected $contents = array();&lt;br /&gt;
&lt;br /&gt;
	public function onPrivacyExportRequest(PrivacyTableRequest $request, User $user = null)&lt;br /&gt;
	{&lt;br /&gt;
		// This plugin only processes data for registered user accounts&lt;br /&gt;
		if (!$user)&lt;br /&gt;
		{&lt;br /&gt;
			return array();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$domains   = array();&lt;br /&gt;
		$domains[] = $this-&amp;gt;createContentDomain($user);&lt;br /&gt;
&lt;br /&gt;
		// Create domains for each article&#039;s custom fields&lt;br /&gt;
		foreach ($this-&amp;gt;contents as $content)&lt;br /&gt;
		{&lt;br /&gt;
			$domains[] = $this-&amp;gt;createContentCustomFieldsDomain($content);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return $domains;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	private function createContentDomain(JUser $user)&lt;br /&gt;
	{&lt;br /&gt;
		$domain = $this-&amp;gt;createDomain(&#039;user content&#039;, &#039;Joomla! user content data&#039;);&lt;br /&gt;
&lt;br /&gt;
		$query = $this-&amp;gt;db-&amp;gt;getQuery(true)&lt;br /&gt;
			-&amp;gt;select(&#039;*&#039;)&lt;br /&gt;
			-&amp;gt;from($this-&amp;gt;db-&amp;gt;quoteName(&#039;#__content&#039;))&lt;br /&gt;
			-&amp;gt;where($this-&amp;gt;db-&amp;gt;quoteName(&#039;created_by&#039;) . &#039; = &#039; . (int) $user-&amp;gt;id)&lt;br /&gt;
			-&amp;gt;order($this-&amp;gt;db-&amp;gt;quoteName(&#039;ordering&#039;) . &#039; ASC&#039;);&lt;br /&gt;
&lt;br /&gt;
		$items = $this-&amp;gt;db-&amp;gt;setQuery($query)-&amp;gt;loadAssocList();&lt;br /&gt;
&lt;br /&gt;
		// Add each article to the domain&lt;br /&gt;
		foreach ($items as $item)&lt;br /&gt;
		{&lt;br /&gt;
			$domain-&amp;gt;addItem($this-&amp;gt;createItemFromArray($item));&lt;br /&gt;
&lt;br /&gt;
			// Store the article for use in the custom fields processing&lt;br /&gt;
			$this-&amp;gt;contents[] = (object) $item;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return $domain;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	private function createContentCustomFieldsDomain($content)&lt;br /&gt;
	{&lt;br /&gt;
		$domain = $this-&amp;gt;createDomain(&#039;content custom fields&#039;, &#039;Joomla! content custom fields data&#039;);&lt;br /&gt;
&lt;br /&gt;
		// Get item&#039;s fields, also preparing their value property for manual display&lt;br /&gt;
		$fields = FieldsHelper::getFields(&#039;com_content.article&#039;, $content);&lt;br /&gt;
&lt;br /&gt;
		foreach ($fields as $field)&lt;br /&gt;
		{&lt;br /&gt;
			$fieldValue = is_array($field-&amp;gt;value) ? implode(&#039;, &#039;, $field-&amp;gt;value) : $field-&amp;gt;value;&lt;br /&gt;
&lt;br /&gt;
			$data = array(&lt;br /&gt;
				&#039;content_id&#039;  =&amp;gt; $content-&amp;gt;id,&lt;br /&gt;
				&#039;field_name&#039;  =&amp;gt; $field-&amp;gt;name,&lt;br /&gt;
				&#039;field_title&#039; =&amp;gt; $field-&amp;gt;title,&lt;br /&gt;
				&#039;field_value&#039; =&amp;gt; $fieldValue,&lt;br /&gt;
			);&lt;br /&gt;
&lt;br /&gt;
			$domain-&amp;gt;addItem($this-&amp;gt;createItemFromArray($data));&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return $domain;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Integrate_Extensions_with_the_Privacy_Component&amp;diff=506906</id>
		<title>J3.x:Integrate Extensions with the Privacy Component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Integrate_Extensions_with_the_Privacy_Component&amp;diff=506906"/>
		<updated>2018-08-29T01:58:57Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Created page with &amp;quot;The information below is provided to extension developers to help create integrations with the Privacy Tool Suite.  == Privacy Related Extension...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The information below is provided to extension developers to help create integrations with the [[S:MyLanguage/J3.x:Privacy|Privacy Tool Suite]].&lt;br /&gt;
&lt;br /&gt;
== Privacy Related Extension Capabilities ==&lt;br /&gt;
&lt;br /&gt;
The new privacy component has a &#039;&#039;&#039;Capabilities&#039;&#039;&#039; section which allows extensions to report privacy related capabilities.  The aim for this section is to help users to understand what an extension may do related to personal data on users and help site owners plan accordingly.  For details on this section, including how a plugin should integrate with it, please see the [[S:MyLanguage/J3.x:Report_Extension_Capabilities_in_Privacy_Component|Report Extension Capabilities in Privacy Component]] page.&lt;br /&gt;
&lt;br /&gt;
== Check for a Published Privacy Policy ==&lt;br /&gt;
&lt;br /&gt;
The privacy component&#039;s health check notifies users if there is a privacy policy published on the website.  This check is performed by the &amp;lt;tt&amp;gt;onPrivacyCheckPrivacyPolicyPublished&amp;lt;/tt&amp;gt; event which can be subscribed to by plugins in the privacy, system, and user plugin groups.  The event receives an associative array by reference with two keys as its argument:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;published&amp;quot; - A boolean value indicating that there is a published policy&lt;br /&gt;
* &amp;quot;editLink&amp;quot; - The URL to edit the policy item, this is displayed if there is a privacy policy published&lt;br /&gt;
&lt;br /&gt;
As a best practice, it is suggested that plugins first check if the &amp;quot;published&amp;quot; flag is already set to true and not make further changes to the data array if so.  Note that the &#039;&#039;&#039;System - Privacy Consent&#039;&#039;&#039; core plugin will process this event.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function onPrivacyCheckPrivacyPolicyPublished(&amp;amp;$policy)&lt;br /&gt;
{&lt;br /&gt;
	// If another plugin has already indicated a policy is published, we won&#039;t change anything here&lt;br /&gt;
	if ($policy[&#039;published&#039;])&lt;br /&gt;
	{&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Do stuff to find the privacy policy data&lt;br /&gt;
&lt;br /&gt;
	$policy[&#039;published&#039;] = true;&lt;br /&gt;
	$policy[&#039;editLink&#039;]  = &#039;&#039;; // The link to the item&#039;s edit page, processed through JRoute, i.e. JRoute::_(&#039;index.php?option=com_content&amp;amp;task=article.edit&amp;amp;id=1&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506905</id>
		<title>J3.x:Information Request Workflow in Privacy Component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506905"/>
		<updated>2018-08-29T01:42:18Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: /* Processing a Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Information requests are the central element to the privacy component and processing user requests for their data to be exported or removed from a site.&lt;br /&gt;
&lt;br /&gt;
== Creating a Request ==&lt;br /&gt;
&lt;br /&gt;
A request can be created either by a super user for the website or an authenticated user through the request form.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;IMPORTANT&#039;&#039; To create and process information requests, your website MUST be able to send emails due to the requirement for the information owner to confirm the request.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
=== Super User Creation ===&lt;br /&gt;
&lt;br /&gt;
Through the &#039;&#039;&#039;Privacy: Information Requests&#039;&#039;&#039; screen, any super user may create a new information request.  This is the only way to create information requests for users who do NOT have accounts on the website.  To create a request, the super user must specify:&lt;br /&gt;
&lt;br /&gt;
* The email address of the user for whom to process data&lt;br /&gt;
* The request type (export or remove)&lt;br /&gt;
&lt;br /&gt;
Note: In this context, a user means any individual or organization who has made a request, regardless of whether there is a registered user account on the site for a user (as an example, this would allow the tool suite to process requests for sites which have a commenting system which allows guests to comment by providing a name and/or email address without requiring to be registered on the site).&lt;br /&gt;
&lt;br /&gt;
=== Authenticated User Request ===&lt;br /&gt;
&lt;br /&gt;
Registered users may submit information requests for their accounts on the website.  It is suggested to create a &#039;&#039;&#039;Privacy &amp;gt; Create Request&#039;&#039;&#039; menu item to link to the information request form.  When submitting an information request, the user must provide:&lt;br /&gt;
&lt;br /&gt;
* Their email address&lt;br /&gt;
* The request type (export or remove)&lt;br /&gt;
&lt;br /&gt;
== Confirming a Request ==&lt;br /&gt;
&lt;br /&gt;
Once a request has been created, regardless of how it is created, the user must confirm that this is a valid request for their information. They will receive an email from the website alerting them to the request&#039;s creation and be provided a link to a confirmation form where they will need to enter the token provided in the email and their email address to confirm the request&#039;s validity. Once the user confirms the request, it will be marked as &#039;&#039;&#039;Confirmed&#039;&#039;&#039; in the component&#039;s requests list and the site&#039;s super user(s) will be able to process it.&lt;br /&gt;
&lt;br /&gt;
The token in this email is valid for 24 hours. If a request is not confirmed in that timeframe, the request will be marked as &#039;&#039;&#039;Invalid&#039;&#039;&#039; in the component&#039;s requests list and a new request must be submitted.&lt;br /&gt;
&lt;br /&gt;
It is suggested to create a hidden &#039;&#039;&#039;Privacy &amp;gt; Confirm Request&#039;&#039;&#039; menu item in order to provide a SEF URL for this page, however this is not required.&lt;br /&gt;
&lt;br /&gt;
== Processing a Request ==&lt;br /&gt;
&lt;br /&gt;
=== Export Request ===&lt;br /&gt;
&lt;br /&gt;
[[File:Info Request Export-en.png|600px|none]]&lt;br /&gt;
Once an export request has been confirmed, there are two actions available to super users.&lt;br /&gt;
&lt;br /&gt;
* Export Data: This will collect all data for the information request&#039;s subject and create a XML file that will be downloaded to your computer.  This is useful to enable site owners to review the data export prior to sending it to the user.&lt;br /&gt;
* Email Data Export: This will collect all data for the information request&#039;s subject, create a XML file (the same as generated by the Export Data action), and send an email to the user with the exported data file attached.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Important&#039;&#039; The export action can only process data from supported extensions. Therefore, the super user who is acting on the request should review the export and if necessary include data that was not processed from extensions.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
=== Removal Request ===&lt;br /&gt;
&lt;br /&gt;
[[File:Info Request Remove-en.png|600px|none]]&lt;br /&gt;
Once a remove request has been confirmed, there is one action available to super users.&lt;br /&gt;
&lt;br /&gt;
* Delete Data: This process will anonymize and/or remove data related to the information subject. For requests where the information owner also has a registered user account, this process will anonymize the account&#039;s name, username, and email address, as well as block the account from being logged into and log the user out of the site if they are logged in at the time the request is processed.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Important&#039;&#039; The delete action can only process data from supported extensions. Therefore, the super user who is acting on the request should review the site after the removal is completed and if necessary manually anonymize or remove data that was not processed from extensions.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
== Completing a Request ==&lt;br /&gt;
&lt;br /&gt;
After the request has been processed, the request should be marked as completed. This will indicate that the request has been fulfilled and there is no further action to be taken.&lt;br /&gt;
&lt;br /&gt;
== Additional Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[S:MyLanguage/J3.x:Integrate Extensions with the Privacy Component|Developer&#039;s Guide for the Privacy Tool Suite]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy{{#translation:}}]]&lt;br /&gt;
[[Category:Components{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla! 3.9{{#translation:}}]]&lt;br /&gt;
[[Category:Plugins{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=File:Info_Request_Remove-en.png&amp;diff=506904</id>
		<title>File:Info Request Remove-en.png</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=File:Info_Request_Remove-en.png&amp;diff=506904"/>
		<updated>2018-08-29T01:37:11Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506903</id>
		<title>J3.x:Information Request Workflow in Privacy Component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506903"/>
		<updated>2018-08-29T01:36:16Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: /* Export Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Information requests are the central element to the privacy component and processing user requests for their data to be exported or removed from a site.&lt;br /&gt;
&lt;br /&gt;
== Creating a Request ==&lt;br /&gt;
&lt;br /&gt;
A request can be created either by a super user for the website or an authenticated user through the request form.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;IMPORTANT&#039;&#039; To create and process information requests, your website MUST be able to send emails due to the requirement for the information owner to confirm the request.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
=== Super User Creation ===&lt;br /&gt;
&lt;br /&gt;
Through the &#039;&#039;&#039;Privacy: Information Requests&#039;&#039;&#039; screen, any super user may create a new information request.  This is the only way to create information requests for users who do NOT have accounts on the website.  To create a request, the super user must specify:&lt;br /&gt;
&lt;br /&gt;
* The email address of the user for whom to process data&lt;br /&gt;
* The request type (export or remove)&lt;br /&gt;
&lt;br /&gt;
Note: In this context, a user means any individual or organization who has made a request, regardless of whether there is a registered user account on the site for a user (as an example, this would allow the tool suite to process requests for sites which have a commenting system which allows guests to comment by providing a name and/or email address without requiring to be registered on the site).&lt;br /&gt;
&lt;br /&gt;
=== Authenticated User Request ===&lt;br /&gt;
&lt;br /&gt;
Registered users may submit information requests for their accounts on the website.  It is suggested to create a &#039;&#039;&#039;Privacy &amp;gt; Create Request&#039;&#039;&#039; menu item to link to the information request form.  When submitting an information request, the user must provide:&lt;br /&gt;
&lt;br /&gt;
* Their email address&lt;br /&gt;
* The request type (export or remove)&lt;br /&gt;
&lt;br /&gt;
== Confirming a Request ==&lt;br /&gt;
&lt;br /&gt;
Once a request has been created, regardless of how it is created, the user must confirm that this is a valid request for their information. They will receive an email from the website alerting them to the request&#039;s creation and be provided a link to a confirmation form where they will need to enter the token provided in the email and their email address to confirm the request&#039;s validity. Once the user confirms the request, it will be marked as &#039;&#039;&#039;Confirmed&#039;&#039;&#039; in the component&#039;s requests list and the site&#039;s super user(s) will be able to process it.&lt;br /&gt;
&lt;br /&gt;
The token in this email is valid for 24 hours. If a request is not confirmed in that timeframe, the request will be marked as &#039;&#039;&#039;Invalid&#039;&#039;&#039; in the component&#039;s requests list and a new request must be submitted.&lt;br /&gt;
&lt;br /&gt;
It is suggested to create a hidden &#039;&#039;&#039;Privacy &amp;gt; Confirm Request&#039;&#039;&#039; menu item in order to provide a SEF URL for this page, however this is not required.&lt;br /&gt;
&lt;br /&gt;
== Processing a Request ==&lt;br /&gt;
&lt;br /&gt;
=== Export Request ===&lt;br /&gt;
&lt;br /&gt;
[[File:Info Request Export-en.png|600px|none]]&lt;br /&gt;
Once an export request has been confirmed, there are two actions available to super users.&lt;br /&gt;
&lt;br /&gt;
* Export Data: This will collect all data for the information request&#039;s subject and create a XML file that will be downloaded to your computer.  This is useful to enable site owners to review the data export prior to sending it to the user.&lt;br /&gt;
* Email Data Export: This will collect all data for the information request&#039;s subject, create a XML file (the same as generated by the Export Data action), and send an email to the user with the exported data file attached.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Important&#039;&#039; The export action can only process data from supported extensions. Therefore, the super user who is acting on the request should review the export and if necessary include data that was not processed from extensions.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
=== Removal Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
== Completing a Request ==&lt;br /&gt;
&lt;br /&gt;
After the request has been processed, the request should be marked as completed. This will indicate that the request has been fulfilled and there is no further action to be taken.&lt;br /&gt;
&lt;br /&gt;
== Additional Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[S:MyLanguage/J3.x:Integrate Extensions with the Privacy Component|Developer&#039;s Guide for the Privacy Tool Suite]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy{{#translation:}}]]&lt;br /&gt;
[[Category:Components{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla! 3.9{{#translation:}}]]&lt;br /&gt;
[[Category:Plugins{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=File:Info_Request_Export-en.png&amp;diff=506902</id>
		<title>File:Info Request Export-en.png</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=File:Info_Request_Export-en.png&amp;diff=506902"/>
		<updated>2018-08-29T01:24:48Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506901</id>
		<title>J3.x:Information Request Workflow in Privacy Component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506901"/>
		<updated>2018-08-29T01:20:02Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: /* Confirming a Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Information requests are the central element to the privacy component and processing user requests for their data to be exported or removed from a site.&lt;br /&gt;
&lt;br /&gt;
== Creating a Request ==&lt;br /&gt;
&lt;br /&gt;
A request can be created either by a super user for the website or an authenticated user through the request form.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;IMPORTANT&#039;&#039; To create and process information requests, your website MUST be able to send emails due to the requirement for the information owner to confirm the request.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
=== Super User Creation ===&lt;br /&gt;
&lt;br /&gt;
Through the &#039;&#039;&#039;Privacy: Information Requests&#039;&#039;&#039; screen, any super user may create a new information request.  This is the only way to create information requests for users who do NOT have accounts on the website.  To create a request, the super user must specify:&lt;br /&gt;
&lt;br /&gt;
* The email address of the user for whom to process data&lt;br /&gt;
* The request type (export or remove)&lt;br /&gt;
&lt;br /&gt;
Note: In this context, a user means any individual or organization who has made a request, regardless of whether there is a registered user account on the site for a user (as an example, this would allow the tool suite to process requests for sites which have a commenting system which allows guests to comment by providing a name and/or email address without requiring to be registered on the site).&lt;br /&gt;
&lt;br /&gt;
=== Authenticated User Request ===&lt;br /&gt;
&lt;br /&gt;
Registered users may submit information requests for their accounts on the website.  It is suggested to create a &#039;&#039;&#039;Privacy &amp;gt; Create Request&#039;&#039;&#039; menu item to link to the information request form.  When submitting an information request, the user must provide:&lt;br /&gt;
&lt;br /&gt;
* Their email address&lt;br /&gt;
* The request type (export or remove)&lt;br /&gt;
&lt;br /&gt;
== Confirming a Request ==&lt;br /&gt;
&lt;br /&gt;
Once a request has been created, regardless of how it is created, the user must confirm that this is a valid request for their information. They will receive an email from the website alerting them to the request&#039;s creation and be provided a link to a confirmation form where they will need to enter the token provided in the email and their email address to confirm the request&#039;s validity. Once the user confirms the request, it will be marked as &#039;&#039;&#039;Confirmed&#039;&#039;&#039; in the component&#039;s requests list and the site&#039;s super user(s) will be able to process it.&lt;br /&gt;
&lt;br /&gt;
The token in this email is valid for 24 hours. If a request is not confirmed in that timeframe, the request will be marked as &#039;&#039;&#039;Invalid&#039;&#039;&#039; in the component&#039;s requests list and a new request must be submitted.&lt;br /&gt;
&lt;br /&gt;
It is suggested to create a hidden &#039;&#039;&#039;Privacy &amp;gt; Confirm Request&#039;&#039;&#039; menu item in order to provide a SEF URL for this page, however this is not required.&lt;br /&gt;
&lt;br /&gt;
== Processing a Request ==&lt;br /&gt;
&lt;br /&gt;
=== Export Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
=== Removal Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
== Completing a Request ==&lt;br /&gt;
&lt;br /&gt;
After the request has been processed, the request should be marked as completed. This will indicate that the request has been fulfilled and there is no further action to be taken.&lt;br /&gt;
&lt;br /&gt;
== Additional Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[S:MyLanguage/J3.x:Integrate Extensions with the Privacy Component|Developer&#039;s Guide for the Privacy Tool Suite]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy{{#translation:}}]]&lt;br /&gt;
[[Category:Components{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla! 3.9{{#translation:}}]]&lt;br /&gt;
[[Category:Plugins{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506900</id>
		<title>J3.x:Information Request Workflow in Privacy Component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506900"/>
		<updated>2018-08-29T01:18:10Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: /* Authenticated User Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Information requests are the central element to the privacy component and processing user requests for their data to be exported or removed from a site.&lt;br /&gt;
&lt;br /&gt;
== Creating a Request ==&lt;br /&gt;
&lt;br /&gt;
A request can be created either by a super user for the website or an authenticated user through the request form.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;IMPORTANT&#039;&#039; To create and process information requests, your website MUST be able to send emails due to the requirement for the information owner to confirm the request.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
=== Super User Creation ===&lt;br /&gt;
&lt;br /&gt;
Through the &#039;&#039;&#039;Privacy: Information Requests&#039;&#039;&#039; screen, any super user may create a new information request.  This is the only way to create information requests for users who do NOT have accounts on the website.  To create a request, the super user must specify:&lt;br /&gt;
&lt;br /&gt;
* The email address of the user for whom to process data&lt;br /&gt;
* The request type (export or remove)&lt;br /&gt;
&lt;br /&gt;
Note: In this context, a user means any individual or organization who has made a request, regardless of whether there is a registered user account on the site for a user (as an example, this would allow the tool suite to process requests for sites which have a commenting system which allows guests to comment by providing a name and/or email address without requiring to be registered on the site).&lt;br /&gt;
&lt;br /&gt;
=== Authenticated User Request ===&lt;br /&gt;
&lt;br /&gt;
Registered users may submit information requests for their accounts on the website.  It is suggested to create a &#039;&#039;&#039;Privacy &amp;gt; Create Request&#039;&#039;&#039; menu item to link to the information request form.  When submitting an information request, the user must provide:&lt;br /&gt;
&lt;br /&gt;
* Their email address&lt;br /&gt;
* The request type (export or remove)&lt;br /&gt;
&lt;br /&gt;
== Confirming a Request ==&lt;br /&gt;
&lt;br /&gt;
Once a request has been created, regardless of how it is created, the user must confirm that this is a valid request for their information. They will receive an email from the website alerting them to the request&#039;s creation and be provided a link to a confirmation form where they will need to enter the token provided in the email and their email address to confirm the request&#039;s validity. Once the user confirms the request, it will be marked as &#039;&#039;&#039;Confirmed&#039;&#039;&#039; in the component&#039;s requests list and the site&#039;s super user(s) will be able to process it.&lt;br /&gt;
&lt;br /&gt;
The token in this email is valid for 24 hours. If a request is not confirmed in that timeframe, the request will be marked as &#039;&#039;&#039;Invalid&#039;&#039;&#039; in the component&#039;s requests list and a new request must be submitted.&lt;br /&gt;
&lt;br /&gt;
== Processing a Request ==&lt;br /&gt;
&lt;br /&gt;
=== Export Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
=== Removal Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
== Completing a Request ==&lt;br /&gt;
&lt;br /&gt;
After the request has been processed, the request should be marked as completed. This will indicate that the request has been fulfilled and there is no further action to be taken.&lt;br /&gt;
&lt;br /&gt;
== Additional Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[S:MyLanguage/J3.x:Integrate Extensions with the Privacy Component|Developer&#039;s Guide for the Privacy Tool Suite]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy{{#translation:}}]]&lt;br /&gt;
[[Category:Components{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla! 3.9{{#translation:}}]]&lt;br /&gt;
[[Category:Plugins{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506899</id>
		<title>J3.x:Information Request Workflow in Privacy Component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506899"/>
		<updated>2018-08-29T01:17:20Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: /* Super User Creation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Information requests are the central element to the privacy component and processing user requests for their data to be exported or removed from a site.&lt;br /&gt;
&lt;br /&gt;
== Creating a Request ==&lt;br /&gt;
&lt;br /&gt;
A request can be created either by a super user for the website or an authenticated user through the request form.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;IMPORTANT&#039;&#039; To create and process information requests, your website MUST be able to send emails due to the requirement for the information owner to confirm the request.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
=== Super User Creation ===&lt;br /&gt;
&lt;br /&gt;
Through the &#039;&#039;&#039;Privacy: Information Requests&#039;&#039;&#039; screen, any super user may create a new information request.  This is the only way to create information requests for users who do NOT have accounts on the website.  To create a request, the super user must specify:&lt;br /&gt;
&lt;br /&gt;
* The email address of the user for whom to process data&lt;br /&gt;
* The request type (export or remove)&lt;br /&gt;
&lt;br /&gt;
Note: In this context, a user means any individual or organization who has made a request, regardless of whether there is a registered user account on the site for a user (as an example, this would allow the tool suite to process requests for sites which have a commenting system which allows guests to comment by providing a name and/or email address without requiring to be registered on the site).&lt;br /&gt;
&lt;br /&gt;
=== Authenticated User Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
== Confirming a Request ==&lt;br /&gt;
&lt;br /&gt;
Once a request has been created, regardless of how it is created, the user must confirm that this is a valid request for their information. They will receive an email from the website alerting them to the request&#039;s creation and be provided a link to a confirmation form where they will need to enter the token provided in the email and their email address to confirm the request&#039;s validity. Once the user confirms the request, it will be marked as &#039;&#039;&#039;Confirmed&#039;&#039;&#039; in the component&#039;s requests list and the site&#039;s super user(s) will be able to process it.&lt;br /&gt;
&lt;br /&gt;
The token in this email is valid for 24 hours. If a request is not confirmed in that timeframe, the request will be marked as &#039;&#039;&#039;Invalid&#039;&#039;&#039; in the component&#039;s requests list and a new request must be submitted.&lt;br /&gt;
&lt;br /&gt;
== Processing a Request ==&lt;br /&gt;
&lt;br /&gt;
=== Export Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
=== Removal Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
== Completing a Request ==&lt;br /&gt;
&lt;br /&gt;
After the request has been processed, the request should be marked as completed. This will indicate that the request has been fulfilled and there is no further action to be taken.&lt;br /&gt;
&lt;br /&gt;
== Additional Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[S:MyLanguage/J3.x:Integrate Extensions with the Privacy Component|Developer&#039;s Guide for the Privacy Tool Suite]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy{{#translation:}}]]&lt;br /&gt;
[[Category:Components{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla! 3.9{{#translation:}}]]&lt;br /&gt;
[[Category:Plugins{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506898</id>
		<title>J3.x:Information Request Workflow in Privacy Component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506898"/>
		<updated>2018-08-29T01:14:47Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: /* Creating a Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Information requests are the central element to the privacy component and processing user requests for their data to be exported or removed from a site.&lt;br /&gt;
&lt;br /&gt;
== Creating a Request ==&lt;br /&gt;
&lt;br /&gt;
A request can be created either by a super user for the website or an authenticated user through the request form.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;IMPORTANT&#039;&#039; To create and process information requests, your website MUST be able to send emails due to the requirement for the information owner to confirm the request.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
=== Super User Creation ===&lt;br /&gt;
&lt;br /&gt;
Through the &#039;&#039;&#039;Privacy: Information Requests&#039;&#039;&#039; screen, any super user may create a new information request.  This is the only way to create information requests for users who do NOT have accounts on the website.  To create a request, the super user must specify:&lt;br /&gt;
&lt;br /&gt;
- The email address of the user for whom to process data&lt;br /&gt;
- The request type (export or remove)&lt;br /&gt;
&lt;br /&gt;
Note: In this context, a user means any individual or organization who has made a request, regardless of whether there is a registered user account on the site for a user (as an example, this would allow the tool suite to process requests for sites which have a commenting system which allows guests to comment by providing a name and/or email address without requiring to be registered on the site).&lt;br /&gt;
&lt;br /&gt;
=== Authenticated User Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
== Confirming a Request ==&lt;br /&gt;
&lt;br /&gt;
Once a request has been created, regardless of how it is created, the user must confirm that this is a valid request for their information. They will receive an email from the website alerting them to the request&#039;s creation and be provided a link to a confirmation form where they will need to enter the token provided in the email and their email address to confirm the request&#039;s validity. Once the user confirms the request, it will be marked as &#039;&#039;&#039;Confirmed&#039;&#039;&#039; in the component&#039;s requests list and the site&#039;s super user(s) will be able to process it.&lt;br /&gt;
&lt;br /&gt;
The token in this email is valid for 24 hours. If a request is not confirmed in that timeframe, the request will be marked as &#039;&#039;&#039;Invalid&#039;&#039;&#039; in the component&#039;s requests list and a new request must be submitted.&lt;br /&gt;
&lt;br /&gt;
== Processing a Request ==&lt;br /&gt;
&lt;br /&gt;
=== Export Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
=== Removal Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
== Completing a Request ==&lt;br /&gt;
&lt;br /&gt;
After the request has been processed, the request should be marked as completed. This will indicate that the request has been fulfilled and there is no further action to be taken.&lt;br /&gt;
&lt;br /&gt;
== Additional Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[S:MyLanguage/J3.x:Integrate Extensions with the Privacy Component|Developer&#039;s Guide for the Privacy Tool Suite]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy{{#translation:}}]]&lt;br /&gt;
[[Category:Components{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla! 3.9{{#translation:}}]]&lt;br /&gt;
[[Category:Plugins{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506897</id>
		<title>J3.x:Information Request Workflow in Privacy Component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=506897"/>
		<updated>2018-08-29T01:13:26Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: /* Super User Creation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Information requests are the central element to the privacy component and processing user requests for their data to be exported or removed from a site.&lt;br /&gt;
&lt;br /&gt;
== Creating a Request ==&lt;br /&gt;
&lt;br /&gt;
A request can be created either by a super user for the website or an authenticated user through the request form.&lt;br /&gt;
&lt;br /&gt;
=== Super User Creation ===&lt;br /&gt;
&lt;br /&gt;
Through the &#039;&#039;&#039;Privacy: Information Requests&#039;&#039;&#039; screen, any super user may create a new information request.  This is the only way to create information requests for users who do NOT have accounts on the website.  To create a request, the super user must specify:&lt;br /&gt;
&lt;br /&gt;
- The email address of the user for whom to process data&lt;br /&gt;
- The request type (export or remove)&lt;br /&gt;
&lt;br /&gt;
Note: In this context, a user means any individual or organization who has made a request, regardless of whether there is a registered user account on the site for a user (as an example, this would allow the tool suite to process requests for sites which have a commenting system which allows guests to comment by providing a name and/or email address without requiring to be registered on the site).&lt;br /&gt;
&lt;br /&gt;
=== Authenticated User Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
== Confirming a Request ==&lt;br /&gt;
&lt;br /&gt;
Once a request has been created, regardless of how it is created, the user must confirm that this is a valid request for their information. They will receive an email from the website alerting them to the request&#039;s creation and be provided a link to a confirmation form where they will need to enter the token provided in the email and their email address to confirm the request&#039;s validity. Once the user confirms the request, it will be marked as &#039;&#039;&#039;Confirmed&#039;&#039;&#039; in the component&#039;s requests list and the site&#039;s super user(s) will be able to process it.&lt;br /&gt;
&lt;br /&gt;
The token in this email is valid for 24 hours. If a request is not confirmed in that timeframe, the request will be marked as &#039;&#039;&#039;Invalid&#039;&#039;&#039; in the component&#039;s requests list and a new request must be submitted.&lt;br /&gt;
&lt;br /&gt;
== Processing a Request ==&lt;br /&gt;
&lt;br /&gt;
=== Export Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
=== Removal Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
== Completing a Request ==&lt;br /&gt;
&lt;br /&gt;
After the request has been processed, the request should be marked as completed. This will indicate that the request has been fulfilled and there is no further action to be taken.&lt;br /&gt;
&lt;br /&gt;
== Additional Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[S:MyLanguage/J3.x:Integrate Extensions with the Privacy Component|Developer&#039;s Guide for the Privacy Tool Suite]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy{{#translation:}}]]&lt;br /&gt;
[[Category:Components{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla! 3.9{{#translation:}}]]&lt;br /&gt;
[[Category:Plugins{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=506896</id>
		<title>J3.x:Privacy</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=506896"/>
		<updated>2018-08-29T01:04:16Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: /* Health Check */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;[[Category:Needs to be marked for translation]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Top portal heading|color=white-bkgd|icon=magic|icon-color=#5091cd|size=3x|text-color=#333|title=Tutorial&amp;lt;br /&amp;gt;&lt;br /&gt;
How to Use the New Privacy Tool Suite}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Joomla version|version=3.9}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of Joomla 3.9, Joomla introduced a privacy tool suite in response to laws and regulations such as GDPR.&amp;lt;br /&amp;gt;&lt;br /&gt;
In this tutorial, you will find information on how to set up these new extensions.&lt;br /&gt;
&lt;br /&gt;
== Component ==&lt;br /&gt;
=== Privacy Dashboard ===&lt;br /&gt;
The privacy dashboard provides a summary of the information requests for the website and a status of recommended actions to take. The Privacy Dashboard is located under the Menu link &#039;Users&amp;quot; in the admin panel&lt;br /&gt;
&lt;br /&gt;
==== Request Count ====&lt;br /&gt;
The request count &amp;quot;module&amp;quot; is a summary of the information requests on a website, this is similar to the privacy dashboard module explained below.&lt;br /&gt;
&lt;br /&gt;
==== Health Check ====&lt;br /&gt;
[[File:Privacy Dashboard Health Check-en.png|600px|none]]&lt;br /&gt;
The health check &amp;quot;module&amp;quot; checks the status of several actions that it is recommended site owners take as it relates to integrating the privacy tools into their website, including:&lt;br /&gt;
&lt;br /&gt;
* Check if a privacy policy is published - This will check if a privacy policy is configured and published; developers can integrate support for this check through the &amp;lt;tt&amp;gt;onPrivacyCheckPrivacyPolicyPublished&amp;lt;/tt&amp;gt; event.  If a policy is set in the &#039;&#039;&#039;System - Privacy Consent&#039;&#039;&#039; plugin then this check will succeed.&lt;br /&gt;
* Check if the information request form has a published menu item - This will determine if the frontend information request form has a published menu item to help authenticated users submit valid requests.  Regardless of a menu item being published, a valid URL for the request form is always displayed.&lt;br /&gt;
* Check if there are any urgent requests - This will check for confirmed requests older than the age specified in the component parameters (default 14 days) and alert the site owner of any requests requiring urgent attention.&lt;br /&gt;
* Check if mail sending is enabled - To process information requests, the site must be able to send email.  With mail sending disabled, information requests cannot be created or actioned.&lt;br /&gt;
&lt;br /&gt;
=== Extension Capabilities ===&lt;br /&gt;
This screen collects and displays information about privacy related capabilities (such as personal data processing, cookies set in your browser, or information shared with third parties for a feature to work) to assist users with evaluating extensions for privacy related concerns and preparing documentation such as a privacy policy or terms of service. More information about this screen and information on how developers can add support for it can be found on the [[S:MyLanguage/J3.x:Report_Extension_Capabilities_in_Privacy_Component|Report Extension Capabilities in Privacy Component]] page.&lt;br /&gt;
&lt;br /&gt;
=== Information Requests ===&lt;br /&gt;
This screen is the central location for processing and managing user information requests. More information about this screen and the workflow for information requests can be found on the [[S:MyLanguage/J3.x:Information_Request_Workflow_in_Privacy_Component|Information Request Workflow in Privacy Component]] page.&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
=== System - Privacy Consent ===&lt;br /&gt;
[[File:Consent to Privacy Policy-en.png|600px|none]]&lt;br /&gt;
When personal identifiable information is collected you should ensure:&lt;br /&gt;
* the user is informed why you are requesting this information in plain and easy to understand language&lt;br /&gt;
* the user knows what data you collect about them&lt;br /&gt;
* the user knows what you will be using the data for&lt;br /&gt;
* the user has actively consented to your usage of the data.&lt;br /&gt;
&lt;br /&gt;
This plugin does &#039;&#039;&#039;NOT&#039;&#039;&#039; make your web site legally compliant, it is just a step in the process.&lt;br /&gt;
&lt;br /&gt;
Once the plugin has been enabled then any new user registering on your site will be required to consent to the Privacy conditions. The date and IP address of the user will be recorded. All existing users will be redirected to their User Profile so that they can consent.&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
[[File:Privacy Consent Configuration-en.png|600px|none]]&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to &#039;&#039;&#039;Extensions {{rarr}} Plugins&#039;&#039;&#039; and search for &#039;&#039;&#039;Privacy&#039;&#039;&#039;. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites.&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_USER_PRIVACYCONSENT_NOTE_FIELD_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for  Multilingual sites.&#039;&#039; If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Redirect Message ====&lt;br /&gt;
[[File:Redirect message-en.png|600px|none]]&lt;br /&gt;
This is the message that is displayed to existing users when they login for the first time since the Privacy Consent plugin was enabled on the site. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites.&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_USER_PRIVACYCONSENT_REDIRECT_MESSAGE_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
=== User - Terms and Condition ===&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to &#039;&#039;&#039;Extensions {{rarr}} Plugins&#039;&#039;&#039; and search for &#039;&#039;&#039;Terms&#039;&#039;&#039;. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Terms &amp;amp; Conditions ====&lt;br /&gt;
This is a brief notice that will appear above the Terms &amp;amp; Conditions checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites.&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_USER_TERMS_NOTE_FIELD_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Terms &amp;amp; Conditions Article ====&lt;br /&gt;
If you wish to have a longer Terms &amp;amp; Conditions you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites:&#039;&#039; If you associate this article with alternatives in other languages then the Terms &amp;amp; Conditions will be displayed in the correct language for the user.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
* Bulleted list item&lt;br /&gt;
&lt;br /&gt;
=== Content - Confirm Consent ===&lt;br /&gt;
[[File:Confirm Consent checkbox-en.png|600px|none]]&lt;br /&gt;
This plugin will add a required checkbox to a form eg the core contact form&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
[[File:Confirmconsent configuration-en.png|600px|none]]&lt;br /&gt;
&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to &#039;&#039;&#039;Extensions {{rarr}} Plugins&#039;&#039;&#039; and search for &#039;&#039;&#039;Consent&#039;&#039;&#039;. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites:&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_CONTENT_CONFIRMCONSENT_FIELD_NOTE_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for  Multilingual sites:&#039;&#039; If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
=== Privacy Dashboard ===&lt;br /&gt;
[[File:Privacy Dashboard Module-en.png|600px|none]]&lt;br /&gt;
&lt;br /&gt;
This module provides a summary of the information requests received for your website. The module is installed and enabled by default with a new Joomla 3.9 installation. To add it to your dashboard on an updated site, go to &#039;&#039;&#039;Extensions {{rarr}} Modules&#039;&#039;&#039;, change the Site filter to &#039;&#039;&#039;Administrator&#039;&#039;&#039;, add a new &#039;&#039;&#039;Privacy Dashboard&#039;&#039;&#039; module, assign it to the &#039;&#039;&#039;cpanel&#039;&#039;&#039; position, and set access to &#039;&#039;&#039;Super Users&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy]]&lt;br /&gt;
[[Category:Components]]&lt;br /&gt;
[[Category:Joomla! 3.9]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=File:Privacy_Dashboard_Health_Check-en.png&amp;diff=506895</id>
		<title>File:Privacy Dashboard Health Check-en.png</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=File:Privacy_Dashboard_Health_Check-en.png&amp;diff=506895"/>
		<updated>2018-08-29T01:01:55Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Mbabker uploaded a new version of File:Privacy Dashboard Health Check-en.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{JEDL}}&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Development_Best_Practices&amp;diff=500357</id>
		<title>Development Best Practices</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Development_Best_Practices&amp;diff=500357"/>
		<updated>2018-08-07T20:16:35Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Remove link that per Radek is not authorized content for publishing on a Joomla site due to it being a third party site and an implicit endorsement of a third party.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are a collection of the Joomla! Development practices you should observe when developing a component, plugin or module for Joomla.&lt;br /&gt;
&lt;br /&gt;
== General Development Guidelines ==&lt;br /&gt;
&lt;br /&gt;
* Don&#039;t use the &amp;lt;code&amp;gt;DS&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DIRECTORY_SEPARATOR&amp;lt;/code&amp;gt; constant when including files. It is no longer needed, as pointed out by [http://us2.php.net/manual/en/ref.filesystem.php#73954 Christian on php.net]&lt;br /&gt;
* Don&#039;t depend on &amp;lt;code&amp;gt;register_globals&amp;lt;/code&amp;gt;. This is a HIGH security risk, and the feature has been deprecated in PHP 5.3 and removed in 5.4.&lt;br /&gt;
* Don&#039;t access the &amp;lt;code&amp;gt;$_GET, $_POST, $_REQUEST, $_FILES and $_SERVER&amp;lt;/code&amp;gt; superglobals directly. Use &amp;lt;code&amp;gt;JInput&amp;lt;/code&amp;gt; (typically: &amp;lt;code&amp;gt;JFactory::getApplication()-&amp;gt;input)&amp;lt;/code&amp;gt; instead. &amp;lt;code&amp;gt;JInput&amp;lt;/code&amp;gt; filters the input, helping you to easily write more secure software.&lt;br /&gt;
* Don&#039;t hardcode your SQL queries and do not include unescaped raw data into them. Always use &amp;lt;code&amp;gt;JDatabase&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;JDatabaseQuery&amp;lt;/code&amp;gt;. It&#039;s as simple as &amp;lt;code&amp;gt;JFactory::getDbo()-&amp;gt;getQuery(true)&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Don&#039;t use arbitrary entry points, i.e. .php files which must be accessible outside Joomla!, directly from the web. Typically used to accommodate for payment processors and image resizers, this practice is extremely insecure and strongly discouraged. Use a Joomla! component or a system plugin instead.&lt;br /&gt;
* Don&#039;t reinvent the wheel. If there&#039;s a Joomla! class to do that try using it before you roll your own. Chances are the core class is already good enough and much better tested.&lt;br /&gt;
* Do use sensible prefixes for your table names. If your component is called &#039;&#039;&#039;com_foobar&#039;&#039;&#039; it stands to reason that its tables follow the naming pattern:{{-}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot; style=&amp;quot;margin-left:3em;&amp;quot;&amp;gt;&lt;br /&gt;
 // Good&lt;br /&gt;
 #__foobar_something&lt;br /&gt;
&lt;br /&gt;
 // Bad&lt;br /&gt;
 #__fbr_something &lt;br /&gt;
&lt;br /&gt;
 //Really Bad!&lt;br /&gt;
 #__something &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Do test your extensions with pre-release versions of Joomla! and/or the &amp;quot;staging&amp;quot; branch of the Git repository. Making sure that users of your extension can update Joomla! safely is your responsibility.&lt;br /&gt;
* Do provide documentation for your extensions. Even a short video with less than stellar English is better than nothing.&lt;br /&gt;
* Do use &amp;lt;code&amp;gt;JText&amp;lt;/code&amp;gt; to translate the output of your extension instead of hardcoding text. The vast majority of Joomla! users are not native English speakers and they will thank you for your consideration.&lt;br /&gt;
* Do comment your code. Not just for the people who have to work with it, but also yourself six months from now.&lt;br /&gt;
* Do test your code under real usage conditions, with real world data sets. You might be surprised at what you find.&lt;br /&gt;
&lt;br /&gt;
== Where should I place JavaScript, CSS, and Image files that belong to my Component? ==&lt;br /&gt;
You can see in your root a general media folder to hold all assets.&lt;br /&gt;
&lt;br /&gt;
What this means in real terms is that when in your XML install manifest, if you put files inside a &amp;lt;media&amp;gt; tag instead of a &amp;lt;files&amp;gt; tag then they will be sent to the JPATH_ROOT/media folder.  If you give it &amp;lt;media destination=&amp;quot;com_foo&amp;quot;&amp;gt; then it will put the files in JPATH_ROOT/media/com_foo&lt;br /&gt;
&lt;br /&gt;
In some cases you have a component, we&#039;ll say com_foo, and then you have a few modules that go along with com_foo... for sake of the example we&#039;ll call them mod_foo_1, mod_foo_2 and mod_foo_3.  There is no reason to package media elements for the three modules if they are all the same and they depend upon the component anyway.  The best and most logical way to do things is to put them all in a central place that is namespaced appropriately.&lt;br /&gt;
&lt;br /&gt;
By storing media in the media folder, this enables templates to override it with template overrides versus being required to modify the files shipped with your extension, causing those customizations to be lost during updates.  By loading your media using the [http://api.joomla.org/cms-3/classes/JHtml.html#method_image image], [http://api.joomla.org/cms-3/classes/JHtml.html#method_script script], and [http://api.joomla.org/cms-3/classes/JHtml.html#method_stylesheet stylesheet] methods in the JHtml class instead of loading the media directly with JDocument or hard coded tags, this enables easy overrides of your extension&#039;s media so that its output can be customized to the site it is used on.&lt;br /&gt;
&lt;br /&gt;
== Where should I place files generated by my Component? ==&lt;br /&gt;
It depends on the nature of these files. There are two decisive factors:&lt;br /&gt;
&lt;br /&gt;
* The permanence of the file: temporary, cache or permanent. Temporary files are files which are supposed to be removed immediately after use, before the page load completes. Cache files will be stored on the server for a while, at most until their expiration date. Both temporary and cache files can be deleted without prior warning and your code must anticipate that. Permanent files, on the other hand, are not meant to be removed automatically.&lt;br /&gt;
* The disposition of the file: web accessible or web inaccessible. The web accessible files are those which MUST be able to be accessed over the web, e.g. when you type their URL in a web browser. The web inaccessible files are those which NEEDN&#039;T be able to be accessed over the web.&lt;br /&gt;
&lt;br /&gt;
This gives us the following possibilities:&lt;br /&gt;
* Temporary, web inaccessible. Use Joomla!&#039;s temp-directory. You can get it by doing JFactory::getConfig()-&amp;gt;get(&#039;tmp_path&#039;). Hardcoding the path as JPATH_ROOT . &#039;/tmp&#039; is a bad practice and you must not do it.&lt;br /&gt;
* Temporary, web accessible. That&#039;s not acceptable! Temporary files are by definition inaccessible from the web. Maybe you really meant &amp;quot;cache&amp;quot; instead of &amp;quot;temporary&amp;quot;?&lt;br /&gt;
* Cache, web inaccessible. Use the defined Joomla! cache directory. Use the JPATH_CACHE constant to find its location. Please note that the cache directory may be different in the front-end and back-end of your site.&lt;br /&gt;
* Cache, web accessible. Use a subdirectory of the media folder. See the section about Javascript and CSS files, it&#039;s the same thing.&lt;br /&gt;
* Permanent, web inaccessible. Use a folder under your extension&#039;s main directory. If you really want the files to be completely inaccessible from the web remember to place a .htaccess file or, better yet, give your users the option to use a directory outside the site&#039;s root.&lt;br /&gt;
* Permanent, web accessible. Use a subdirectory of the media folder. See the section about Javascript and CSS files, it&#039;s the same thing.&lt;br /&gt;
&lt;br /&gt;
This applies to all files handled by your Component, including files your code generates and files the users of your component upload / generate.&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to manage log files you are advised to use the JLog class instead of rolling your own solution.&lt;br /&gt;
&lt;br /&gt;
== Considerations for Javascript ==&lt;br /&gt;
When you are using addScriptDeclaration to add inline Javascript in a Joomla! page you have to be very considerate about your code&#039;s interaction with other Javascript from other extensions running on the same page. Good practices include:&lt;br /&gt;
* Do terminate your Javascript with a semicolon and a newline. If both are missing, your code is the source of Javascript errors as soon as another developer&#039;s code uses addScriptDeclaration after your code.&lt;br /&gt;
* Do make sure your Javascript code is valid and doesn&#039;t throw errors. Errors in your code will render any code after it inoperable.&lt;br /&gt;
* Do use try/catch blocks for risky code. If you are unsure if some code is risky just surround it with a try/catch block anyway.&lt;br /&gt;
* Do load your inline Javascript in the view template, not the view class (view.html.php file). Most likely it depends on the DOM which will be different when a site integrator uses a template override.&lt;br /&gt;
&lt;br /&gt;
Other good practices concerning Javascript code in your extensions includes:&lt;br /&gt;
* Don&#039;t modify core Javascript objects including jQuery, mooTools and everything in the Joomla Javascript object. If you want to modify a core object, subclass. If you are not sure, subclass.&lt;br /&gt;
* Do not meddle with other developers&#039; code. This includes moving script tags to the bottom of the page or forcibly removing script tags (e.g. removing any script tag whose source URL includes the strong &amp;quot;jq&amp;quot; – you know for whom the bell tolls).&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:JavaScript]]&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J4.x:Setting_Up_Your_Local_Environment&amp;diff=497069</id>
		<title>J4.x:Setting Up Your Local Environment</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J4.x:Setting_Up_Your_Local_Environment&amp;diff=497069"/>
		<updated>2018-07-28T20:58:22Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Add note about platform reqs, some formatting and English cleanup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;With Joomla 4 we have changed the development process, it is no longer possible to clone the repository and have a usable Joomla installation. We follow here best practices and have implemented a build process for the CMS.&lt;br /&gt;
&lt;br /&gt;
== Quick start guide ==&lt;br /&gt;
What you have to do to setup you dev environment depends on your operating system. We can not write documentation for any OS so you should answer your favorite search engine to find a HowTo. &lt;br /&gt;
&lt;br /&gt;
=== Tools you need ===&lt;br /&gt;
&lt;br /&gt;
# PHP - basically the same as you need for running a Joomla Site, but you need the PHP CLI (command line interface) Version (see the [[S:MyLanguage/Configuring_a_LAMPP_server_for_PHP_development|Configuring a LAMPP server for PHP development]] page)&lt;br /&gt;
# Composer - for managing Joomla&#039;s PHP Dependencies - for help installing Composer read the documentation at https://getcomposer.org/doc/00-intro.md&lt;br /&gt;
# Node.js - for compiling Joomla&#039;s JavaScript and SASS files - for help installing Node.js please follow the instructions available on https://nodejs.org/en/&lt;br /&gt;
# Git - for version management&lt;br /&gt;
&lt;br /&gt;
=== Steps to setup the local environment ===&lt;br /&gt;
&lt;br /&gt;
# Clone the repository&lt;br /&gt;
# run &amp;lt;tt&amp;gt;composer install&amp;lt;/tt&amp;gt; from the root of the git repo&lt;br /&gt;
# run &amp;lt;tt&amp;gt;npm install&amp;lt;/tt&amp;gt; from the root of the git repo&lt;br /&gt;
&lt;br /&gt;
== The a bit longer start guide ==&lt;br /&gt;
&lt;br /&gt;
Joomla is not different to many other web tools these days. It has a large PHP part and it has more and more JavaScript code. While PHP coding doesn&#039;t need so much preparation, JavaScript needs a lot tooling around. The main reason is that nobody writes code in a way that every browser understands, so the code needs transpiling from e.g. ES6 to a compatible version of JavaScript. The same is true for CSS, for Joomla we are using SASS and this will be converted to native CSS so that any browser understands it. As downside setting up a dev environment is a bit more complicated but the tooling make coding also more convenient. Thanks to watchers and browser auto reload you can see your change in real time. &lt;br /&gt;
&lt;br /&gt;
=== PHP === &lt;br /&gt;
It should be enough to run &amp;lt;tt&amp;gt;composer install&amp;lt;/tt&amp;gt; as this will install PHP dependencies saved in the composer.lock file. You can do this as many times as you like, it will only install new packages when the composer.lock file is changed. Don&#039;t run &amp;lt;tt&amp;gt;composer update&amp;lt;/tt&amp;gt; as this will update all packages to newer versions and update the composer.lock file.&lt;br /&gt;
&lt;br /&gt;
Note: You may need to run &amp;lt;tt&amp;gt;composer install&amp;lt;/tt&amp;gt; with the &amp;lt;tt&amp;gt;--ignore-platform-reqs&amp;lt;/tt&amp;gt; option to ignore platform requirements specified in Composer, i.e. if you do not have PHP&#039;s LDAP extension installed.&lt;br /&gt;
&lt;br /&gt;
=== Node/npm scripts ===&lt;br /&gt;
Node.js comes with a package manager called NPM (in some way the same as Composer). NPM has a &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; command and we have prepared some scripts to make your life easier. You have to run the commands for the root of the repository.&lt;br /&gt;
&lt;br /&gt;
==== npm run build:css ====&lt;br /&gt;
It will compile SASS files to CSS and also create the minified files &lt;br /&gt;
&lt;br /&gt;
==== npm run build:js ====&lt;br /&gt;
It will compile and transpile the JavaScript files to the correct format and create minified files&lt;br /&gt;
&lt;br /&gt;
==== npm run watch:css ====&lt;br /&gt;
This is the same as the &amp;lt;tt&amp;gt;build:css&amp;lt;/tt&amp;gt; command but will watch for changes and automatically build updated files&lt;br /&gt;
&lt;br /&gt;
==== npm run watch:js ====&lt;br /&gt;
This is the same as the &amp;lt;tt&amp;gt;build:js&amp;lt;/tt&amp;gt; command but will watch for changes and automatically build updated files&lt;br /&gt;
&lt;br /&gt;
==== npm run lint:js ====&lt;br /&gt;
This will make a syntax check on JavaScript files&lt;br /&gt;
&lt;br /&gt;
==== npm run test ====&lt;br /&gt;
This will run other JavaScript testing suite&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Joomla! 4.x]]&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=491248</id>
		<title>J3.x:Privacy</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=491248"/>
		<updated>2018-06-29T02:53:43Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Add information requests link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top portal heading|color=white-bkgd|icon=magic|icon-color=#5091cd|size=3x|text-color=#333|title=Tutorial&amp;lt;br /&amp;gt;&lt;br /&gt;
How to Use the New Privacy Tool Suite}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Joomla version|version=3.9}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of Joomla 3.9, Joomla introduced a privacy tool suite in response to laws and regulations such as GDPR.&amp;lt;br /&amp;gt;&lt;br /&gt;
In this tutorial, you will find information on how to set up these new extensions.&lt;br /&gt;
&lt;br /&gt;
== Component ==&lt;br /&gt;
=== Privacy Dashboard ===&lt;br /&gt;
The privacy dashboard provides a summary of the information requests for the website and a status of recommended actions to take.&lt;br /&gt;
&lt;br /&gt;
==== Request Count ====&lt;br /&gt;
The request count &amp;quot;module&amp;quot; is a summary of the information requests on a website, this is similar to the privacy dashboard module explained below.&lt;br /&gt;
&lt;br /&gt;
==== Health Check ====&lt;br /&gt;
[[File:Privacy Dashboard Health Check-en.png|600px|none]]&lt;br /&gt;
The health check &amp;quot;module&amp;quot; checks the status of several actions that it is recommended site owners take as it relates to integrating the privacy tools into their website, including:&lt;br /&gt;
&lt;br /&gt;
* Check if a privacy policy is published - This will check if a privacy policy is configured and published; developers can integrate support for this check through the &amp;lt;tt&amp;gt;onPrivacyCheckPrivacyPolicyPublished&amp;lt;/tt&amp;gt; event.  If a policy is set in the &#039;&#039;&#039;System - Privacy Consent&#039;&#039;&#039; plugin then this check will succeed.&lt;br /&gt;
* Check if the information request form has a published menu item - This will determine if the frontend information request form has a published menu item to help authenticated users submit valid requests.  Regardless of a menu item being published, a valid URL for the request form is always displayed.&lt;br /&gt;
* Check if there are any urgent requests - This will check for confirmed requests older than the age specified in the component parameters (default 14 days) and alert the site owner of any requests requiring urgent attention.&lt;br /&gt;
&lt;br /&gt;
=== Extension Capabilities ===&lt;br /&gt;
This screen collects and displays information about privacy related capabilities (such as personal data processing, cookies set in your browser, or information shared with third parties for a feature to work) to assist users with evaluating extensions for privacy related concerns and preparing documentation such as a privacy policy or terms of service. More information about this screen and information on how developers can add support for it can be found on the [[S:MyLanguage/J3.x:Report_Extension_Capabilities_in_Privacy_Component|Report Extension Capabilities in Privacy Component]] page.&lt;br /&gt;
&lt;br /&gt;
=== Information Requests ===&lt;br /&gt;
This screen is the central location for processing and managing user information requests. More information about this screen and the workflow for information requests can be found on the [[S:MyLanguage/J3.x:Information_Request_Workflow_in_Privacy_Component|Information Request Workflow in Privacy Component]] page.&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
=== System - Privacy Consent ===&lt;br /&gt;
[[File:Consent to Privacy Policy-en.png|600px|none]]&lt;br /&gt;
When personal identifiable information is collected you should ensure:&lt;br /&gt;
* the user is informed why you are requesting this information in plain and easy to understand language&lt;br /&gt;
* the user knows what data you collect about them&lt;br /&gt;
* the user knows what you will be using the data for&lt;br /&gt;
* the user has actively consented to your usage of the data.&lt;br /&gt;
&lt;br /&gt;
This plugin does &#039;&#039;&#039;NOT&#039;&#039;&#039; make your web site legally compliant, it is just a step in the process.&lt;br /&gt;
&lt;br /&gt;
Once the plugin has been enabled then any new user registering on your site will be required to consent to the Privacy conditions. The date and IP address of the user will be recorded. All existing users will be redirected to their User Profile so that they can consent.&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
[[File:Privacy Consent Configuration-en.png|600px|none]]&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to &#039;&#039;&#039;Extensions {{rarr}} Plugins&#039;&#039;&#039; and search for &#039;&#039;&#039;Privacy&#039;&#039;&#039;. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites.&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_USER_PRIVACYCONSENT_NOTE_FIELD_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for  Multilingual sites.&#039;&#039; If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Redirect Message ====&lt;br /&gt;
[[File:Redirect message-en.png|600px|none]]&lt;br /&gt;
This is the message that is displayed to existing users when they login for the first time since the Privacy Consent plugin was enabled on the site. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites.&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_USER_PRIVACYCONSENT_REDIRECT_MESSAGE_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
=== User - Terms and Condition ===&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to &#039;&#039;&#039;Extensions {{rarr}} Plugins&#039;&#039;&#039; and search for &#039;&#039;&#039;Terms&#039;&#039;&#039;. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Terms &amp;amp; Conditions ====&lt;br /&gt;
This is a brief notice that will appear above the Terms &amp;amp; Conditions checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites.&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_USER_TERMS_NOTE_FIELD_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Terms &amp;amp; Conditions Article ====&lt;br /&gt;
If you wish to have a longer Terms &amp;amp; Conditions you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites:&#039;&#039; If you associate this article with alternatives in other languages then the Terms &amp;amp; Conditions will be displayed in the correct language for the user.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
* Bulleted list item&lt;br /&gt;
&lt;br /&gt;
=== Content - Confirm Consent ===&lt;br /&gt;
[[File:Confirm Consent checkbox-en.png|600px|none]]&lt;br /&gt;
This plugin will add a required checkbox to a form eg the core contact form&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
[[File:Confirmconsent configuration-en.png|600px|none]]&lt;br /&gt;
&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to &#039;&#039;&#039;Extensions {{rarr}} Plugins&#039;&#039;&#039; and search for &#039;&#039;&#039;Consent&#039;&#039;&#039;. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites:&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_CONTENT_CONFIRMCONSENT_FIELD_NOTE_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for  Multilingual sites:&#039;&#039; If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
=== Privacy Dashboard ===&lt;br /&gt;
[[File:Privacy Dashboard Module-en.png|600px|none]]&lt;br /&gt;
&lt;br /&gt;
This module provides a summary of the information requests received for your website. The module is installed and enabled by default with a new Joomla 3.9 installation. To add it to your dashboard on an updated site, go to &#039;&#039;&#039;Extensions {{rarr}} Modules&#039;&#039;&#039;, change the Site filter to &#039;&#039;&#039;Administrator&#039;&#039;&#039;, add a new &#039;&#039;&#039;Privacy Dashboard&#039;&#039;&#039; module, assign it to the &#039;&#039;&#039;cpanel&#039;&#039;&#039; position, and set access to &#039;&#039;&#039;Super Users&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy]]&lt;br /&gt;
[[Category:Components]]&lt;br /&gt;
[[Category:Joomla! 3.9]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=491247</id>
		<title>J3.x:Information Request Workflow in Privacy Component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Information_Request_Workflow_in_Privacy_Component&amp;diff=491247"/>
		<updated>2018-06-29T02:51:55Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Created page with &amp;quot;Information requests are the central element to the privacy component and processing user requests for their data to be exported or removed from a site.  == Creating a Request...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Information requests are the central element to the privacy component and processing user requests for their data to be exported or removed from a site.&lt;br /&gt;
&lt;br /&gt;
== Creating a Request ==&lt;br /&gt;
&lt;br /&gt;
A request can be created either by a super user for the website or an authenticated user through the request form.&lt;br /&gt;
&lt;br /&gt;
=== Super User Creation ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
=== Authenticated User Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
== Confirming a Request ==&lt;br /&gt;
&lt;br /&gt;
Once a request has been created, regardless of how it is created, the user must confirm that this is a valid request for their information. They will receive an email from the website alerting them to the request&#039;s creation and be provided a link to a confirmation form where they will need to enter the token provided in the email and their email address to confirm the request&#039;s validity. Once the user confirms the request, it will be marked as &#039;&#039;&#039;Confirmed&#039;&#039;&#039; in the component&#039;s requests list and the site&#039;s super user(s) will be able to process it.&lt;br /&gt;
&lt;br /&gt;
The token in this email is valid for 24 hours. If a request is not confirmed in that timeframe, the request will be marked as &#039;&#039;&#039;Invalid&#039;&#039;&#039; in the component&#039;s requests list and a new request must be submitted.&lt;br /&gt;
&lt;br /&gt;
== Processing a Request ==&lt;br /&gt;
&lt;br /&gt;
=== Export Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
=== Removal Request ===&lt;br /&gt;
&lt;br /&gt;
Coming soon&lt;br /&gt;
&lt;br /&gt;
== Completing a Request ==&lt;br /&gt;
&lt;br /&gt;
After the request has been processed, the request should be marked as completed. This will indicate that the request has been fulfilled and there is no further action to be taken.&lt;br /&gt;
&lt;br /&gt;
== Additional Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[S:MyLanguage/J3.x:Integrate Extensions with the Privacy Component|Developer&#039;s Guide for the Privacy Tool Suite]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy{{#translation:}}]]&lt;br /&gt;
[[Category:Components{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla! 3.9{{#translation:}}]]&lt;br /&gt;
[[Category:Plugins{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=491246</id>
		<title>J3.x:Privacy</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=491246"/>
		<updated>2018-06-29T02:31:58Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: /* Health Check */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top portal heading|color=white-bkgd|icon=magic|icon-color=#5091cd|size=3x|text-color=#333|title=Tutorial&amp;lt;br /&amp;gt;&lt;br /&gt;
How to Use the New Privacy Tool Suite}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Joomla version|version=3.9}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of Joomla 3.9, Joomla introduced a privacy tool suite in response to laws and regulations such as GDPR.&amp;lt;br /&amp;gt;&lt;br /&gt;
In this tutorial, you will find information on how to set up these new extensions.&lt;br /&gt;
&lt;br /&gt;
== Component ==&lt;br /&gt;
=== Privacy Dashboard ===&lt;br /&gt;
The privacy dashboard provides a summary of the information requests for the website and a status of recommended actions to take.&lt;br /&gt;
&lt;br /&gt;
==== Request Count ====&lt;br /&gt;
The request count &amp;quot;module&amp;quot; is a summary of the information requests on a website, this is similar to the privacy dashboard module explained below.&lt;br /&gt;
&lt;br /&gt;
==== Health Check ====&lt;br /&gt;
[[File:Privacy Dashboard Health Check-en.png|600px|none]]&lt;br /&gt;
The health check &amp;quot;module&amp;quot; checks the status of several actions that it is recommended site owners take as it relates to integrating the privacy tools into their website, including:&lt;br /&gt;
&lt;br /&gt;
* Check if a privacy policy is published - This will check if a privacy policy is configured and published; developers can integrate support for this check through the &amp;lt;tt&amp;gt;onPrivacyCheckPrivacyPolicyPublished&amp;lt;/tt&amp;gt; event.  If a policy is set in the &#039;&#039;&#039;System - Privacy Consent&#039;&#039;&#039; plugin then this check will succeed.&lt;br /&gt;
* Check if the information request form has a published menu item - This will determine if the frontend information request form has a published menu item to help authenticated users submit valid requests.  Regardless of a menu item being published, a valid URL for the request form is always displayed.&lt;br /&gt;
* Check if there are any urgent requests - This will check for confirmed requests older than the age specified in the component parameters (default 14 days) and alert the site owner of any requests requiring urgent attention.&lt;br /&gt;
&lt;br /&gt;
=== Extension Capabilities ===&lt;br /&gt;
This screen collects and displays information about privacy related capabilities (such as personal data processing, cookies set in your browser, or information shared with third parties for a feature to work) to assist users with evaluating extensions for privacy related concerns and preparing documentation such as a privacy policy or terms of service. More information about this screen and information on how developers can add support for it can be found on the [[S:MyLanguage/J3.x:Report_Extension_Capabilities_in_Privacy_Component|Report Extension Capabilities in Privacy Component]] page.&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
=== System - Privacy Consent ===&lt;br /&gt;
[[File:Consent to Privacy Policy-en.png|600px|none]]&lt;br /&gt;
When personal identifiable information is collected you should ensure:&lt;br /&gt;
* the user is informed why you are requesting this information in plain and easy to understand language&lt;br /&gt;
* the user knows what data you collect about them&lt;br /&gt;
* the user knows what you will be using the data for&lt;br /&gt;
* the user has actively consented to your usage of the data.&lt;br /&gt;
&lt;br /&gt;
This plugin does &#039;&#039;&#039;NOT&#039;&#039;&#039; make your web site legally compliant, it is just a step in the process.&lt;br /&gt;
&lt;br /&gt;
Once the plugin has been enabled then any new user registering on your site will be required to consent to the Privacy conditions. The date and IP address of the user will be recorded. All existing users will be redirected to their User Profile so that they can consent.&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
[[File:Privacy Consent Configuration-en.png|600px|none]]&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to &#039;&#039;&#039;Extensions {{rarr}} Plugins&#039;&#039;&#039; and search for &#039;&#039;&#039;Privacy&#039;&#039;&#039;. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites.&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_USER_PRIVACYCONSENT_NOTE_FIELD_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for  Multilingual sites.&#039;&#039; If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Redirect Message ====&lt;br /&gt;
[[File:Redirect message-en.png|600px|none]]&lt;br /&gt;
This is the message that is displayed to existing users when they login for the first time since the Privacy Consent plugin was enabled on the site. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites.&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_USER_PRIVACYCONSENT_REDIRECT_MESSAGE_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
=== User - Terms and Condition ===&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to &#039;&#039;&#039;Extensions {{rarr}} Plugins&#039;&#039;&#039; and search for &#039;&#039;&#039;Terms&#039;&#039;&#039;. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Terms &amp;amp; Conditions ====&lt;br /&gt;
This is a brief notice that will appear above the Terms &amp;amp; Conditions checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites.&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_USER_TERMS_NOTE_FIELD_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Terms &amp;amp; Conditions Article ====&lt;br /&gt;
If you wish to have a longer Terms &amp;amp; Conditions you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites:&#039;&#039; If you associate this article with alternatives in other languages then the Terms &amp;amp; Conditions will be displayed in the correct language for the user.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
* Bulleted list item&lt;br /&gt;
&lt;br /&gt;
=== Content - Confirm Consent ===&lt;br /&gt;
[[File:Confirm Consent checkbox-en.png|600px|none]]&lt;br /&gt;
This plugin will add a required checkbox to a form eg the core contact form&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
[[File:Confirmconsent configuration-en.png|600px|none]]&lt;br /&gt;
&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to &#039;&#039;&#039;Extensions {{rarr}} Plugins&#039;&#039;&#039; and search for &#039;&#039;&#039;Consent&#039;&#039;&#039;. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites:&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_CONTENT_CONFIRMCONSENT_FIELD_NOTE_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for  Multilingual sites:&#039;&#039; If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
=== Privacy Dashboard ===&lt;br /&gt;
[[File:Privacy Dashboard Module-en.png|600px|none]]&lt;br /&gt;
&lt;br /&gt;
This module provides a summary of the information requests received for your website. The module is installed and enabled by default with a new Joomla 3.9 installation. To add it to your dashboard on an updated site, go to &#039;&#039;&#039;Extensions {{rarr}} Modules&#039;&#039;&#039;, change the Site filter to &#039;&#039;&#039;Administrator&#039;&#039;&#039;, add a new &#039;&#039;&#039;Privacy Dashboard&#039;&#039;&#039; module, assign it to the &#039;&#039;&#039;cpanel&#039;&#039;&#039; position, and set access to &#039;&#039;&#039;Super Users&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy]]&lt;br /&gt;
[[Category:Components]]&lt;br /&gt;
[[Category:Joomla! 3.9]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=491245</id>
		<title>J3.x:Privacy</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=491245"/>
		<updated>2018-06-29T02:31:40Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: /* Component */ Add dashboard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top portal heading|color=white-bkgd|icon=magic|icon-color=#5091cd|size=3x|text-color=#333|title=Tutorial&amp;lt;br /&amp;gt;&lt;br /&gt;
How to Use the New Privacy Tool Suite}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Joomla version|version=3.9}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of Joomla 3.9, Joomla introduced a privacy tool suite in response to laws and regulations such as GDPR.&amp;lt;br /&amp;gt;&lt;br /&gt;
In this tutorial, you will find information on how to set up these new extensions.&lt;br /&gt;
&lt;br /&gt;
== Component ==&lt;br /&gt;
=== Privacy Dashboard ===&lt;br /&gt;
The privacy dashboard provides a summary of the information requests for the website and a status of recommended actions to take.&lt;br /&gt;
&lt;br /&gt;
==== Request Count ====&lt;br /&gt;
The request count &amp;quot;module&amp;quot; is a summary of the information requests on a website, this is similar to the privacy dashboard module explained below.&lt;br /&gt;
&lt;br /&gt;
==== Health Check ====&lt;br /&gt;
[[File:Privacy Dashboard Health Check.png|600px|none]]&lt;br /&gt;
The health check &amp;quot;module&amp;quot; checks the status of several actions that it is recommended site owners take as it relates to integrating the privacy tools into their website, including:&lt;br /&gt;
&lt;br /&gt;
* Check if a privacy policy is published - This will check if a privacy policy is configured and published; developers can integrate support for this check through the &amp;lt;tt&amp;gt;onPrivacyCheckPrivacyPolicyPublished&amp;lt;/tt&amp;gt; event.  If a policy is set in the &#039;&#039;&#039;System - Privacy Consent&#039;&#039;&#039; plugin then this check will succeed.&lt;br /&gt;
* Check if the information request form has a published menu item - This will determine if the frontend information request form has a published menu item to help authenticated users submit valid requests.  Regardless of a menu item being published, a valid URL for the request form is always displayed.&lt;br /&gt;
* Check if there are any urgent requests - This will check for confirmed requests older than the age specified in the component parameters (default 14 days) and alert the site owner of any requests requiring urgent attention.&lt;br /&gt;
&lt;br /&gt;
=== Extension Capabilities ===&lt;br /&gt;
This screen collects and displays information about privacy related capabilities (such as personal data processing, cookies set in your browser, or information shared with third parties for a feature to work) to assist users with evaluating extensions for privacy related concerns and preparing documentation such as a privacy policy or terms of service. More information about this screen and information on how developers can add support for it can be found on the [[S:MyLanguage/J3.x:Report_Extension_Capabilities_in_Privacy_Component|Report Extension Capabilities in Privacy Component]] page.&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
=== System - Privacy Consent ===&lt;br /&gt;
[[File:Consent to Privacy Policy-en.png|600px|none]]&lt;br /&gt;
When personal identifiable information is collected you should ensure:&lt;br /&gt;
* the user is informed why you are requesting this information in plain and easy to understand language&lt;br /&gt;
* the user knows what data you collect about them&lt;br /&gt;
* the user knows what you will be using the data for&lt;br /&gt;
* the user has actively consented to your usage of the data.&lt;br /&gt;
&lt;br /&gt;
This plugin does &#039;&#039;&#039;NOT&#039;&#039;&#039; make your web site legally compliant, it is just a step in the process.&lt;br /&gt;
&lt;br /&gt;
Once the plugin has been enabled then any new user registering on your site will be required to consent to the Privacy conditions. The date and IP address of the user will be recorded. All existing users will be redirected to their User Profile so that they can consent.&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
[[File:Privacy Consent Configuration-en.png|600px|none]]&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to &#039;&#039;&#039;Extensions {{rarr}} Plugins&#039;&#039;&#039; and search for &#039;&#039;&#039;Privacy&#039;&#039;&#039;. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites.&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_USER_PRIVACYCONSENT_NOTE_FIELD_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for  Multilingual sites.&#039;&#039; If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Redirect Message ====&lt;br /&gt;
[[File:Redirect message-en.png|600px|none]]&lt;br /&gt;
This is the message that is displayed to existing users when they login for the first time since the Privacy Consent plugin was enabled on the site. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites.&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_USER_PRIVACYCONSENT_REDIRECT_MESSAGE_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
=== User - Terms and Condition ===&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to &#039;&#039;&#039;Extensions {{rarr}} Plugins&#039;&#039;&#039; and search for &#039;&#039;&#039;Terms&#039;&#039;&#039;. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Terms &amp;amp; Conditions ====&lt;br /&gt;
This is a brief notice that will appear above the Terms &amp;amp; Conditions checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites.&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_USER_TERMS_NOTE_FIELD_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Terms &amp;amp; Conditions Article ====&lt;br /&gt;
If you wish to have a longer Terms &amp;amp; Conditions you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites:&#039;&#039; If you associate this article with alternatives in other languages then the Terms &amp;amp; Conditions will be displayed in the correct language for the user.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
* Bulleted list item&lt;br /&gt;
&lt;br /&gt;
=== Content - Confirm Consent ===&lt;br /&gt;
[[File:Confirm Consent checkbox-en.png|600px|none]]&lt;br /&gt;
This plugin will add a required checkbox to a form eg the core contact form&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
[[File:Confirmconsent configuration-en.png|600px|none]]&lt;br /&gt;
&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to &#039;&#039;&#039;Extensions {{rarr}} Plugins&#039;&#039;&#039; and search for &#039;&#039;&#039;Consent&#039;&#039;&#039;. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for Multilingual sites:&#039;&#039; If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the &amp;lt;tt&amp;gt;PLG_CONTENT_CONFIRMCONSENT_FIELD_NOTE_DEFAULT&amp;lt;/tt&amp;gt; language string for each language installed.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
{{note|&#039;&#039;Note for  Multilingual sites:&#039;&#039; If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.|type=notice}}&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
=== Privacy Dashboard ===&lt;br /&gt;
[[File:Privacy Dashboard Module-en.png|600px|none]]&lt;br /&gt;
&lt;br /&gt;
This module provides a summary of the information requests received for your website. The module is installed and enabled by default with a new Joomla 3.9 installation. To add it to your dashboard on an updated site, go to &#039;&#039;&#039;Extensions {{rarr}} Modules&#039;&#039;&#039;, change the Site filter to &#039;&#039;&#039;Administrator&#039;&#039;&#039;, add a new &#039;&#039;&#039;Privacy Dashboard&#039;&#039;&#039; module, assign it to the &#039;&#039;&#039;cpanel&#039;&#039;&#039; position, and set access to &#039;&#039;&#039;Super Users&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy]]&lt;br /&gt;
[[Category:Components]]&lt;br /&gt;
[[Category:Joomla! 3.9]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=File:Privacy_Dashboard_Health_Check-en.png&amp;diff=491244</id>
		<title>File:Privacy Dashboard Health Check-en.png</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=File:Privacy_Dashboard_Health_Check-en.png&amp;diff=491244"/>
		<updated>2018-06-29T02:19:04Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{JEDL}}&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=489440</id>
		<title>J3.x:Privacy</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=489440"/>
		<updated>2018-06-26T02:39:16Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Reverted edits by Sandra97 (talk) to last revision by Mbabker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Component ==&lt;br /&gt;
=== Extension Capabilities ===&lt;br /&gt;
This screen collects and displays information about privacy related capabilities (such as personal data processing, cookies set in your browser, or information shared with third parties for a feature to work) to assist users with evaluating extensions for privacy related concerns and preparing documentation such as a privacy policy or terms of service. More information about this screen and information on how developers can add support for it can be found on the [[J3.x:Report_Extension_Capabilities_in_Privacy_Component|Report Extension Capabilities in Privacy Component]] page.&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
=== System - Privacy Consent ===&lt;br /&gt;
[[File:Consent to Privacy Policy-en.png|thumb]]&lt;br /&gt;
When personal identifiable information is collected you should ensure:&lt;br /&gt;
* the user is informed why you are requesting this information in plain and easy to understand language.&lt;br /&gt;
* the user knows what data you collect about them&lt;br /&gt;
* the user knows what you will be using the data for&lt;br /&gt;
* the user has actively consented to your usage of the data&lt;br /&gt;
&lt;br /&gt;
This plugin does NOT make your web site legally compliant, it is just a step in the process.&lt;br /&gt;
&lt;br /&gt;
Once the plugin has been enabled then any new user registering on your site will be required to consent to the Privacy conditions. The date and ip address of the user will be recorded. All existing users will be redirected to their User Profile so that they can consent.&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
[[File:Privacy Consent Configuration-en.png|thumb]]&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to Extensions -&amp;gt; Plugins and search for Privacy. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_USER_PRIVACYCONSENT_NOTE_FIELD_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Redirect Message ====&lt;br /&gt;
[[File:Redirect message-en.png|thumb]]&lt;br /&gt;
This is the message that is displayed to existing users when they login for the first time since the Privacy Consent plugin was enabled on the site. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_USER_PRIVACYCONSENT_REDIRECT_MESSAGE_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== User - Terms and Condition ===&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to Extensions -&amp;gt; Plugins and search for Terms. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Terms &amp;amp; Conditions ====&lt;br /&gt;
This is a brief notice that will appear above the Terms &amp;amp; Conditions checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_USER_TERMS_NOTE_FIELD_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Terms &amp;amp; Conditions Article ====&lt;br /&gt;
If you wish to have a longer Terms &amp;amp; Conditions you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you associate this article with alternatives in other languages then the Terms &amp;amp; Conditions will be displayed in the correct language for the user.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Bulleted list item&lt;br /&gt;
=== Content - Confirm Consent ===&lt;br /&gt;
[[File:Confirm Consent checkbox-en.png|thumb]]&lt;br /&gt;
This plugin will add a required checkbox to a form eg the core contact form&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
[[File:Confirmconsent configuration-en.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to Extensions -&amp;gt; Plugins and search for Consent. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_CONTENT_CONFIRMCONSENT_FIELD_NOTE_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
=== Privacy Dashboard ===&lt;br /&gt;
[[File:Privacy Dashboard Module.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
This module provides a summary of the information requests received for your website. The module is installed and enabled by default with a new Joomla 3.9 installation. To add it to your dashboard on an updated site, go to Extensions -&amp;gt; Modules, change the Site filter to Administrator, add a new &amp;quot;Privacy Dashboard&amp;quot; module, assign it to the &amp;quot;cpanel&amp;quot; position, and set access to &amp;quot;Super Users&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy]]&lt;br /&gt;
[[Category:Components]]&lt;br /&gt;
[[Category:Joomla! 3.9]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=487841</id>
		<title>J3.x:Privacy</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=487841"/>
		<updated>2018-06-20T03:25:10Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Put thumbnails before text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Component ==&lt;br /&gt;
=== Extension Capabilities ===&lt;br /&gt;
This screen collects and displays information about privacy related capabilities (such as personal data processing, cookies set in your browser, or information shared with third parties for a feature to work) to assist users with evaluating extensions for privacy related concerns and preparing documentation such as a privacy policy or terms of service. More information about this screen and information on how developers can add support for it can be found on the [[J3.x:Report_Extension_Capabilities_in_Privacy_Component|Report Extension Capabilities in Privacy Component]] page.&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
=== System - Privacy Consent ===&lt;br /&gt;
[[File:Consent to Privacy Policy-en.png|thumb]]&lt;br /&gt;
When personal identifiable information is collected you should ensure:&lt;br /&gt;
* the user is informed why you are requesting this information in plain and easy to understand language.&lt;br /&gt;
* the user knows what data you collect about them&lt;br /&gt;
* the user knows what you will be using the data for&lt;br /&gt;
* the user has actively consented to your usage of the data&lt;br /&gt;
&lt;br /&gt;
This plugin does NOT make your web site legally compliant, it is just a step in the process.&lt;br /&gt;
&lt;br /&gt;
Once the plugin has been enabled then any new user registering on your site will be required to consent to the Privacy conditions. The date and ip address of the user will be recorded. All existing users will be redirected to their User Profile so that they can consent.&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
[[File:Privacy Consent Configuration-en.png|thumb]]&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to Extensions -&amp;gt; Plugins and search for Privacy. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_USER_PRIVACYCONSENT_NOTE_FIELD_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Redirect Message ====&lt;br /&gt;
[[File:Redirect message-en.png|thumb]]&lt;br /&gt;
This is the message that is displayed to existing users when they login for the first time since the Privacy Consent plugin was enabled on the site. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_USER_PRIVACYCONSENT_REDIRECT_MESSAGE_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== User - Terms and Condition ===&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to Extensions -&amp;gt; Plugins and search for Terms. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Terms &amp;amp; Conditions ====&lt;br /&gt;
This is a brief notice that will appear above the Terms &amp;amp; Conditions checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_USER_TERMS_NOTE_FIELD_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Terms &amp;amp; Conditions Article ====&lt;br /&gt;
If you wish to have a longer Terms &amp;amp; Conditions you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you associate this article with alternatives in other languages then the Terms &amp;amp; Conditions will be displayed in the correct language for the user.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Bulleted list item&lt;br /&gt;
=== Content - Confirm Consent ===&lt;br /&gt;
[[File:Confirm Consent checkbox-en.png|thumb]]&lt;br /&gt;
This plugin will add a required checkbox to a form eg the core contact form&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
[[File:Confirmconsent configuration-en.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to Extensions -&amp;gt; Plugins and search for Consent. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_CONTENT_CONFIRMCONSENT_FIELD_NOTE_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
=== Privacy Dashboard ===&lt;br /&gt;
[[File:Privacy Dashboard Module.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
This module provides a summary of the information requests received for your website. The module is installed and enabled by default with a new Joomla 3.9 installation. To add it to your dashboard on an updated site, go to Extensions -&amp;gt; Modules, change the Site filter to Administrator, add a new &amp;quot;Privacy Dashboard&amp;quot; module, assign it to the &amp;quot;cpanel&amp;quot; position, and set access to &amp;quot;Super Users&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy]]&lt;br /&gt;
[[Category:Components]]&lt;br /&gt;
[[Category:Joomla! 3.9]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=487840</id>
		<title>J3.x:Privacy</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=487840"/>
		<updated>2018-06-20T03:22:19Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Add dashboard module&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Component ==&lt;br /&gt;
&lt;br /&gt;
=== Extension Capabilities ===&lt;br /&gt;
&lt;br /&gt;
This screen collects and displays information about privacy related capabilities (such as personal data processing, cookies set in your browser, or information shared with third parties for a feature to work) to assist users with evaluating extensions for privacy related concerns and preparing documentation such as a privacy policy or terms of service. More information about this screen and information on how developers can add support for it can be found on the [[J3.x:Report_Extension_Capabilities_in_Privacy_Component|Report Extension Capabilities in Privacy Component]] page.&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
=== System - Privacy Consent ===&lt;br /&gt;
When personal identifiable information is collected you should ensure:&lt;br /&gt;
* the user is informed why you are requesting this information in plain and easy to understand language.&lt;br /&gt;
* the user knows what data you collect about them&lt;br /&gt;
* the user knows what you will be using the data for&lt;br /&gt;
* the user has actively consented to your usage of the data&lt;br /&gt;
&lt;br /&gt;
[[File:Consent to Privacy Policy-en.png|thumb]]&lt;br /&gt;
This plugin does NOT make your web site legally compliant, it is just a step in the process.&lt;br /&gt;
&lt;br /&gt;
Once the plugin has been enabled then any new user registering on your site will be required to consent to the Privacy conditions. The date and ip address of the user will be recorded. All existing users will be redirected to their User Profile so that they can consent.&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to Extensions -&amp;gt; Plugins and search for Privacy. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
[[File:Privacy Consent Configuration-en.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_USER_PRIVACYCONSENT_NOTE_FIELD_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Redirect Message ====&lt;br /&gt;
This is the message that is displayed to existing users when they login for the first time since the Privacy Consent plugin was enabled on the site. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
[[File:Redirect message-en.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_USER_PRIVACYCONSENT_REDIRECT_MESSAGE_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== User - Terms and Condition ===&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to Extensions -&amp;gt; Plugins and search for Terms. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Terms &amp;amp; Conditions ====&lt;br /&gt;
This is a brief notice that will appear above the Terms &amp;amp; Conditions checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_USER_TERMS_NOTE_FIELD_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Terms &amp;amp; Conditions Article ====&lt;br /&gt;
If you wish to have a longer Terms &amp;amp; Conditions you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you associate this article with alternatives in other languages then the Terms &amp;amp; Conditions will be displayed in the correct language for the user.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Bulleted list item&lt;br /&gt;
=== Content - Confirm Consent ===&lt;br /&gt;
This plugin will add a required checkbox to a form eg the core contact form&lt;br /&gt;
[[File:Confirm Consent checkbox-en.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to Extensions -&amp;gt; Plugins and search for Consent. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
[[File:Confirmconsent configuration-en.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_CONTENT_CONFIRMCONSENT_FIELD_NOTE_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
=== Privacy Dashboard ===&lt;br /&gt;
This module provides a summary of the information requests received for your website. The module is installed and enabled by default with a new Joomla 3.9 installation. To add it to your dashboard on an updated site, go to Extensions -&amp;gt; Modules, change the Site filter to Administrator, add a new &amp;quot;Privacy Dashboard&amp;quot; module, assign it to the &amp;quot;cpanel&amp;quot; position, and set access to &amp;quot;Super Users&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:Privacy Dashboard Module.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy]]&lt;br /&gt;
[[Category:Components]]&lt;br /&gt;
[[Category:Joomla! 3.9]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=File:Privacy_Dashboard_Module-en.png&amp;diff=487839</id>
		<title>File:Privacy Dashboard Module-en.png</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=File:Privacy_Dashboard_Module-en.png&amp;diff=487839"/>
		<updated>2018-06-20T03:18:22Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{JEDL}}&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=487838</id>
		<title>J3.x:Privacy</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Privacy&amp;diff=487838"/>
		<updated>2018-06-20T03:15:50Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: /* Component */ Add capabilities screen reference&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Component ==&lt;br /&gt;
&lt;br /&gt;
=== Extension Capabilities ===&lt;br /&gt;
&lt;br /&gt;
This screen collects and displays information about privacy related capabilities (such as personal data processing, cookies set in your browser, or information shared with third parties for a feature to work) to assist users with evaluating extensions for privacy related concerns and preparing documentation such as a privacy policy or terms of service. More information about this screen and information on how developers can add support for it can be found on the [[J3.x:Report_Extension_Capabilities_in_Privacy_Component|Report Extension Capabilities in Privacy Component]] page.&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
=== System - Privacy Consent ===&lt;br /&gt;
When personal identifiable information is collected you should ensure:&lt;br /&gt;
* the user is informed why you are requesting this information in plain and easy to understand language.&lt;br /&gt;
* the user knows what data you collect about them&lt;br /&gt;
* the user knows what you will be using the data for&lt;br /&gt;
* the user has actively consented to your usage of the data&lt;br /&gt;
&lt;br /&gt;
[[File:Consent to Privacy Policy-en.png|thumb]]&lt;br /&gt;
This plugin does NOT make your web site legally compliant, it is just a step in the process.&lt;br /&gt;
&lt;br /&gt;
Once the plugin has been enabled then any new user registering on your site will be required to consent to the Privacy conditions. The date and ip address of the user will be recorded. All existing users will be redirected to their User Profile so that they can consent.&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to Extensions -&amp;gt; Plugins and search for Privacy. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
[[File:Privacy Consent Configuration-en.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_USER_PRIVACYCONSENT_NOTE_FIELD_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Redirect Message ====&lt;br /&gt;
This is the message that is displayed to existing users when they login for the first time since the Privacy Consent plugin was enabled on the site. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
[[File:Redirect message-en.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_USER_PRIVACYCONSENT_REDIRECT_MESSAGE_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== User - Terms and Condition ===&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to Extensions -&amp;gt; Plugins and search for Terms. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
==== Short Terms &amp;amp; Conditions ====&lt;br /&gt;
This is a brief notice that will appear above the Terms &amp;amp; Conditions checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_USER_TERMS_NOTE_FIELD_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Terms &amp;amp; Conditions Article ====&lt;br /&gt;
If you wish to have a longer Terms &amp;amp; Conditions you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you associate this article with alternatives in other languages then the Terms &amp;amp; Conditions will be displayed in the correct language for the user.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Bulleted list item&lt;br /&gt;
=== Content - Confirm Consent ===&lt;br /&gt;
This plugin will add a required checkbox to a form eg the core contact form&lt;br /&gt;
[[File:Confirm Consent checkbox-en.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
==== Plugin Configuration ====&lt;br /&gt;
The plugin is installed but not enabled by default with Joomla 3.9 - to enable it go to Extensions -&amp;gt; Plugins and search for Consent. Once you have located the plugin you can enable it and configure the settings.&lt;br /&gt;
&lt;br /&gt;
[[File:Confirmconsent configuration-en.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
==== Short Privacy Policy ====&lt;br /&gt;
This is a brief notice that will appear above the Privacy Consent checkbox. You can leave it as it is and the displayed message will be used or you can enter your own custom text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you use the default text then it will be displayed in the user&#039;s language. It is not possible to translate the custom text. If you wish to customise the text and display it in multiple languages then you should leave this field blank and use the Joomla language override facility to customise the PLG_CONTENT_CONFIRMCONSENT_FIELD_NOTE_DEFAULT language string for each language installed.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Privacy Article ====&lt;br /&gt;
If you wish to have a longer Privacy Policy you can create/edit the article here which will be displayed in a modal window. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;[NOTE - Multilingual sites] - If you associate this article with alternatives in other languages then the privacy policy will be displayed in the correct language for the user.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy]]&lt;br /&gt;
[[Category:Components]]&lt;br /&gt;
[[Category:Joomla! 3.9]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Report_Extension_Capabilities_in_Privacy_Component&amp;diff=487837</id>
		<title>J3.x:Report Extension Capabilities in Privacy Component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Report_Extension_Capabilities_in_Privacy_Component&amp;diff=487837"/>
		<updated>2018-06-20T03:08:13Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Add page describing the privacy capabilities and how to implement for developers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Privacy Component Capabilities.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
As part of the [[J3.x:Privacy|Privacy Tool Suite]] introduced to Joomla! 3.9, a capabilities screen is present to allow extensions to report the functionality of their extensions that may require consideration when adding new features to a site or preparing documentation such as a privacy policy or terms of use.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT&#039;&#039;&#039; - The capabilities reported on this screen are based on the actively installed and enabled extensions on a site, and that the extensions support reporting their capabilities. As such, this should not be considered a complete list and it is recommended you consult the documentation of each installed extension for full details.&lt;br /&gt;
&lt;br /&gt;
=== Implementation Guide For Developers ===&lt;br /&gt;
&lt;br /&gt;
In order to report extension capabilities, a plugin must be subscribed to the `onPrivacyCollectAdminCapabilities` event. Unlike other plugins which are typically intended for use with a single plugin group, the following plugin groups are imported for potential use with this event:&lt;br /&gt;
&lt;br /&gt;
* Authentication&lt;br /&gt;
* Captcha&lt;br /&gt;
* Installer&lt;br /&gt;
* Privacy&lt;br /&gt;
* System&lt;br /&gt;
* User&lt;br /&gt;
&lt;br /&gt;
A plugin should return an associative array where the key is the text to be displayed as the section title and the value is an array of capabilities to be displayed as a bullet list within the section. All messages should be translated by the plugin. Below is an example of the array structure for the `Captcha - Recaptcha` plugin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function onPrivacyCollectAdminCapabilities()&lt;br /&gt;
{&lt;br /&gt;
	// If a plugin does not have its language files autoloaded, ensure you manually load the language files now otherwise the below may not be translated&lt;br /&gt;
	$this-&amp;gt;loadLanguage();&lt;br /&gt;
&lt;br /&gt;
	return array(&lt;br /&gt;
		JText::_(&#039;PLG_CAPTCHA_RECAPTCHA&#039;) =&amp;gt; array(&lt;br /&gt;
			JText::_(&#039;PLG_RECAPTCHA_PRIVACY_CAPABILITY_IP_ADDRESS&#039;),&lt;br /&gt;
		),&lt;br /&gt;
	);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Privacy]]&lt;br /&gt;
[[Category:Components]]&lt;br /&gt;
[[Category:Joomla! 3.9]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=File:Privacy_Component_Capabilities-en.png&amp;diff=487826</id>
		<title>File:Privacy Component Capabilities-en.png</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=File:Privacy_Component_Capabilities-en.png&amp;diff=487826"/>
		<updated>2018-06-20T02:54:19Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{JEDL}}&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Potential_backward_compatibility_issues_in_Joomla_4&amp;diff=450236</id>
		<title>Potential backward compatibility issues in Joomla 4</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Potential_backward_compatibility_issues_in_Joomla_4&amp;diff=450236"/>
		<updated>2017-09-27T12:42:54Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: PHP 7&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{incomplete}}{{RightTOC}}&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
This document tracks potential backward compatibility issues for Joomla! 4. Listed are issues which potentially break extensions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
The base of this comparison is Joomla! 3.7.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Updated System Requirements == &amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
The system requirements have been updated as follows:&lt;br /&gt;
*PHP 7&lt;br /&gt;
*MySQL 5.5.3&lt;br /&gt;
*PostgreSQL 9.2&lt;br /&gt;
*SQL Server support has been dropped.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== PHP MySQL Extension === &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
*Joomla no longer supports using PHP&#039;s ext/mysql driver (which was removed in PHP 7.0). Joomla will automatically try and use the mysqli extension (available since PHP 5.3) or the mysql PDO Driver (available since PHP 5.3) else it will fail to create a database connection.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMS Libraries == &amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
The following changes have been made to Joomla! CMS libraries (this is primarily code found in the `libraries/cms` directory in Joomla! 3).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Installer === &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Removed Classes ==== &amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
The following classes have been removed in Joomla! 4.0:&lt;br /&gt;
*JInstallerComponent (use JInstallerAdapterComponent instead)&lt;br /&gt;
*JInstallerFile (use JInstallerAdapterFile instead)&lt;br /&gt;
*JInstallerLanguage (use JInstallerAdapterLanguage instead)&lt;br /&gt;
*JInstallerLibrary (use JInstallerAdapterLibrary instead)&lt;br /&gt;
*JInstallerModule (use JInstallerAdapterModule instead)&lt;br /&gt;
*JInstallerPackage (use JInstallerAdapterPackage instead)&lt;br /&gt;
*JInstallerPlugin (use JInstallerAdapterPlugin instead)&lt;br /&gt;
*JInstallerTemplate (use JInstallerAdapterTemplate instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== JInstallerAdapter Inheritance ==== &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
JInstallerAdapter no longer extends from JAdapterInstance and inherently JObject.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Menu === &amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== JMenu is now an abstract class ==== &amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
JMenu is now an abstract class. Subclasses of JMenu must now also implement a load method.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Manual Include Behavior Removed ==== &amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
The logic in JMenu::getInstance() to manually include a file from the application&#039;s includes/menu.php path has been removed. The JMenu subclass should be autoloaded instead.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Pathway === &amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Manual Include Behavior Removed ==== &amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
The logic in JPathway::getInstance() to manually include a file from the application&#039;s includes/pathway.php path has been removed. The JPathway subclass should be autoloaded instead.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Router === &amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Manual Include Behavior Removed ==== &amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
The logic in JRouter::getInstance() to manually include a file from the application&#039;s includes/router.php path has been removed. The JRouter subclass should be autoloaded instead.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== JVersion === &amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
Support for accessing the JVersion class constants as class properties is no longer supported. The constants were introduced in Joomla! 3.5 to prevent the old class properties from being edited.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Platform == &amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
The following changes have been made to Joomla! Platform libraries (this is primarily code found in the `libraries/joomla` or `libraries/legacy` directories in Joomla! 3).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Application === &amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Removed Classes ==== &amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
The following classes have been removed in Joomla! 4.0:&lt;br /&gt;
*JApplicationWebRouter (use the `joomla/router` package instead)&lt;br /&gt;
*JApplicationWebRouterBase (use the `joomla/router` package instead)&lt;br /&gt;
*JApplicationWebRouterRest (use the `joomla/router` package instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Deprecated Classes ==== &amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
The following classes have been deprecated and scheduled for removal in Joomla! 5.0:&lt;br /&gt;
*JApplicationBase (use Joomla\Application\AbstractApplication instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== CLI/Web Class Changes ==== &amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
The JApplicationCli and JApplicationWeb classes have been recomposed to extend from the Framework&#039;s Application package instead. This breaks type checks for a JApplicationBase object. For forward compatibility, it is recommended to check if application classes are an instance of Joomla\Application\AbstractApplication (JApplicationBase has extended this class since Joomla! 3.4).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
Additionally, both of these classes are now abstract. Developers implementing these classes must provide a `doExecute` method with their application&#039;s logic.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== JApplicationCli =====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
Old:&amp;lt;/translate&amp;gt; JApplicationCli {{rarr}} JApplicationBase {{rarr}} Joomla\Application\AbstractApplication&lt;br /&gt;
*&amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
New:&amp;lt;/translate&amp;gt; JApplicationCli {{rarr}} Joomla\Application\AbstractCliApplication {{rarr}} Joomla\Application\AbstractApplication&lt;br /&gt;
&lt;br /&gt;
===== JApplicationWeb =====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
Old:&amp;lt;/translate&amp;gt; JApplicationWeb {{rarr}} JApplicationBase {{rarr}} Joomla\Application\AbstractApplication&lt;br /&gt;
*&amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
New:&amp;lt;/translate&amp;gt; JApplicationWeb {{rarr}} Joomla\Application\AbstractWebApplication {{rarr}} Joomla\Application\AbstractApplication&lt;br /&gt;
&lt;br /&gt;
=== Crypt ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:98--&amp;gt;&lt;br /&gt;
Removed Classes&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:99--&amp;gt;&lt;br /&gt;
The following ciphers have been removed in Joomla! 4.0:&amp;lt;/translate&amp;gt;&lt;br /&gt;
*JCryptCipher3Des&lt;br /&gt;
*JCryptCipherBlowfish&lt;br /&gt;
*JCryptCipherMcrypt&lt;br /&gt;
*JCryptCipherRijndael256&lt;br /&gt;
*JCryptCipherSimple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:100--&amp;gt;&lt;br /&gt;
These have been removed without replacement. Use JCryptCipherCrypto&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Document === &amp;lt;!--T:101--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Deprecated Classes ==== &amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
The following classes have been deprecated and scheduled for removal in Joomla! 5.0:&lt;br /&gt;
*JDocumentError (use \Joomla\Cms\Error\RendererInterface objects instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== JDocumentFeed ====&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:45--&amp;gt;&lt;br /&gt;
The property type of JDocumentFeed::$lastBuildDate has changed from a string to a JDate object. The property was previously unused by the core Joomla API but extensions may have used it.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== JDocumentRendererFeedRss ====&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
In order to comply with the RSS feed specification, JDocumentRendererFeedRss now allows the lastBuildDate element to be configured using the JDocumentFeed::$lastBuildDate class property when a feed is rendered.  This value defaults to the current time, as is the case with Joomla! 3.x and earlier, however the time can be correctly set by changing this class property to a JDate object representing the desired timestamp.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTTP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;==== Deprecated Classes and Interfaces ==== &amp;lt;!--T:47--&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:48--&amp;gt;&lt;br /&gt;
The following classes and interfaces have been deprecated and scheduled for removal in Joomla! 5.0:&lt;br /&gt;
*JHttpResponse (use Joomla\Http\Response instead)&lt;br /&gt;
*JHttpTransport (implement Joomla\Http\TransportInterface instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;==== Class Changes ==== &amp;lt;!--T:49--&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:50--&amp;gt;&lt;br /&gt;
The Framework&#039;s HTTP package is now included in Joomla! 4.0 and JHttp and the JHttpTransport subclasses have been refactored to use the upstream package.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== JHttp =====&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:51--&amp;gt;&lt;br /&gt;
The JHttp class constructor has been loosened with the following changes:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:52--&amp;gt;&lt;br /&gt;
*The options parameter is no longer typehinted as a Joomla\Registry\Registry object, an array or any object implementing the [https://secure.php.net/manual/en/class.arrayaccess.php ArrayAccess] interface can be used instead&lt;br /&gt;
*The transport parameter now allows any Joomla\Http\TransportInterface object.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== JHttpTransport =====&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
The now deprecated JHttpTransport interface extends Joomla\Http\TransportInterface now and has caused backward compatibility breaking changes in the interface.  The constructor is no longer part of the interface, and the interface&#039;s `request()` method has had a signature change.  Specifically, the second parameter which previously typehinted the JUri class now typehints Joomla\Uri\UriInterface.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== JHttpResponse =====&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
In refactoring the response object to inherit from the Framework&#039;s HTTP package, which is now using the PSR-7 ResponseInterface API, a minor compatibility break has been made in the structure of the response headers.  As of 4.0, this will now always be a multi-dimensional array where the key is the header name and the value is an array of values for that header (previously, this was a string).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Image === &amp;lt;!--T:55--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Deprecated Classes and Interfaces ==== &amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:57--&amp;gt;&lt;br /&gt;
The following classes and interfaces have been deprecated and scheduled for removal in Joomla! 5.0:&lt;br /&gt;
* JImageFilter (use Joomla\Image\ImageFilter instead)&lt;br /&gt;
* JImageFilterBackgroundfill (use Joomla\Image\Filter\Backgroundfill instead)&lt;br /&gt;
* JImageFilterBrightness (use Joomla\Image\Filter\Brightness instead)&lt;br /&gt;
* JImageFilterContrast (use Joomla\Image\Filter\Contrast instead)&lt;br /&gt;
* JImageFilterEdgedetect (use Joomla\Image\Filter\Edgedetect instead)&lt;br /&gt;
* JImageFilterEmboss (use Joomla\Image\Filter\Emboss instead)&lt;br /&gt;
* JImageFilterGrayscale (use Joomla\Image\Filter\Grayscale instead)&lt;br /&gt;
* JImageFilterNegate (use Joomla\Image\Filter\Negate instead)&lt;br /&gt;
* JImageFilterSketchy (use Joomla\Image\Filter\Sketchy instead) &lt;br /&gt;
* JImageFilterSmooth (use Joomla\Image\Filter\Smooth instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Class Changes ==== &amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:59--&amp;gt;&lt;br /&gt;
The Framework&#039;s Image package is now included in Joomla! 4.0 and JImage and the JImageFilter subclasses have been refactored to use the upstream package.&amp;lt;/translate&amp;gt;&lt;br /&gt;
=== Keychain ===&lt;br /&gt;
Removing the keychain with 4.0 has resulted in the removal of the following class:&lt;br /&gt;
*JKeychain&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Table === &amp;lt;!--T:60--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:61--&amp;gt;&lt;br /&gt;
* JTable::__construct database object is now typehinted to be a JDatabaseDriver.&lt;br /&gt;
** Subclasses of JTable will need to ensure they are passing a JDatabaseDriver object to the parent constructor&lt;br /&gt;
** Subclasses of JTable will need to change the method signature of setDbo() if they have an extended version of that method to include the typehint&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Mail === &amp;lt;!--T:62--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:63--&amp;gt;&lt;br /&gt;
The following methods have been removed in Joomla! 4.0:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:64--&amp;gt;&lt;br /&gt;
* JMail::sendAdminMail has been removed&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Legacy MVC Layer === &amp;lt;!--T:65--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Legacy Controller ==== &amp;lt;!--T:66--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:67--&amp;gt;&lt;br /&gt;
* JControllerLegacy has been removed from the legacy layer, and we no longer intend to remove it or it&#039;s subclasses in the near future.&lt;br /&gt;
* JControllerLegacy no longer extends JObject. Controllers should not call any of the methods contained in the JObject class.&lt;br /&gt;
* JControllerLegacy implements an interface for multiple task controllers&lt;br /&gt;
* JControllerLegacy::_construct now requires a compulsory JApplicationCms object. If you were previously getting a Controller object through JControllerLegacy::getInstance you do not need to change your code.&lt;br /&gt;
* JControllerForm now using the StringInflector package to determine the list view. This should improve it&#039;s ability to guess determine the list view of more view names. If extension developers find that their list view is no longer being found they should manually set the `view_list` class property in their controller.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Session === &amp;lt;!--T:68--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:69--&amp;gt;&lt;br /&gt;
The session package has undergone a major refactoring to use the Framework&#039;s Session package.  This change primarily effects the internals of the package; changes to the primary public API through the JSession class are minimal.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Removed Classes and Interfaces ==== &amp;lt;!--T:70--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:71--&amp;gt;&lt;br /&gt;
The following classes and interfaces have been removed in Joomla! 5.0:&amp;lt;/translate&amp;gt;&lt;br /&gt;
*JSessionExceptionUnsupported&lt;br /&gt;
*JSessionHandlerInterface&lt;br /&gt;
*JSessionHandlerJoomla&lt;br /&gt;
*JSessionHandlerNative&lt;br /&gt;
*JSessionStorage&lt;br /&gt;
*JSessionStorageApc&lt;br /&gt;
*JSessionStorageDatabase&lt;br /&gt;
*JSessionStorageMemcache&lt;br /&gt;
*JSessionStorageMemcached&lt;br /&gt;
*JSessionStorageNone&lt;br /&gt;
*JSessionStorageWincache&lt;br /&gt;
*JSessionStorageXcache&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== JSession ==== &amp;lt;!--T:72--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:73--&amp;gt;&lt;br /&gt;
JSession now extends from the Framework&#039;s Joomla\Session\Session class.  Many of the methods have a modified signature and a compatibility layer exists to help with the transition.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===== Namespace Parameter Deprecated ===== &amp;lt;!--T:74--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:75--&amp;gt;&lt;br /&gt;
The get, set, has, and clear methods previously supported a namespace parameter.  This parameter is now deprecated, the namespace should be prepended to the name before calling these methods.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===== JSession::clear() Repurposed ===== &amp;lt;!--T:76--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:77--&amp;gt;&lt;br /&gt;
In the Joomla\Session\Session class, the clear method is used to clear all data from the session store.  In JSession, this method is used to remove a single key.  When this method is called with parameters, it will call the new Joomla\Session\Session::remove() method.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;===== JSession::getInstance() Deprecated ===== &amp;lt;!--T:78--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:79--&amp;gt;&lt;br /&gt;
The singleton getInstance() method has been deprecated.  The session object should be retrieved from the active application or the dependency injection container instead.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===== Session Handlers ===== &amp;lt;!--T:80--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:81--&amp;gt;&lt;br /&gt;
In Joomla! 3.x and earlier, session handlers were represented by the JSessionStorage class and its subclasses. In Joomla! 4.0, session handlers are now implementations of Joomla\Session\HandlerInterface (which is an extension of PHP&#039;s [https://secure.php.net/manual/en/class.sessionhandlerinterface.php SessionHandlerInterface]. All handlers which were supported in Joomla! 3.x are still available in 4.0 in addition to two additional handlers; a handler natively implementing the APCu extension and a handler supporting Redis.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Classes Removed Without Replacement === &amp;lt;!--T:82--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
* JNode&lt;br /&gt;
* JTree&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External Libraries == &amp;lt;!--T:83--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:84--&amp;gt;&lt;br /&gt;
The following changes have been made to the external libraries that Joomla! packages and ships.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHPMailer ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:85--&amp;gt;&lt;br /&gt;
Joomla! 4.0 ships with PHPMailer 6.0.  Please review [https://github.com/PHPMailer/PHPMailer/blob/6.0/UPGRADING.md the upgrading guide] for relevant changes.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHPUTF8 ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:86--&amp;gt;&lt;br /&gt;
At Joomla! 3.4, the PHPUTF8 library lived in two locations in the Joomla! package; `libraries/phputf8` and `libraries/vendor/joomla/string/src/phputf8`.  In Joomla! 4.0, the copy of the library in `libraries/phputf8` has been removed.  The Joomla\String\StringHelper class exposes many of the library&#039;s functions and the Composer autoloader definition imports much of the library as well, however, if you need a feature that is not already included then you should import the required functions from the `libraries/vendor/joomla/string/src/phputf8` path.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SimplePie ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:87--&amp;gt;&lt;br /&gt;
The SimplePie library is no longer included with Joomla! 4.0.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== jQuery ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:88--&amp;gt;&lt;br /&gt;
Joomla! 4.0 ships with jQuery 3.  Please review [https://jquery.com/upgrade-guide/3.0/ the upgrading guide] for relevant changes. Note that we are not including jQuery Migrate anymore either. We recommend using it locally to help debug your code if there are any issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bootstrap ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:89--&amp;gt;&lt;br /&gt;
Joomla! 4.0 ships with Bootstrap 4.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Templates == &amp;lt;!--T:90--&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:91--&amp;gt;&lt;br /&gt;
All the Joomla! 3 templates - ISIS and Hathor in the backend, and protostar and Beeze in the frontend are no longer supported. The new 4.0 backend template is called Atum and the frontend template is called Aurora.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Other == &amp;lt;!--T:95--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Bin === &amp;lt;!--T:96--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:97--&amp;gt;&lt;br /&gt;
Removing the keychain with 4.0 has resulted in the removal of the entire Bin directory as it only contained keychain.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
[[Category:Compatibility]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Platform]]&lt;br /&gt;
[[Category:Migration]]&lt;br /&gt;
[[Category:Update Working Group]]&lt;br /&gt;
[[Category:Joomla! 4.x]]&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Optional_Technical_Requirements&amp;diff=446342</id>
		<title>J3.x:Optional Technical Requirements</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Optional_Technical_Requirements&amp;diff=446342"/>
		<updated>2017-09-20T13:53:00Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Updates for 3.8&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Sub-requirements for Joomla! 3.x== &amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
This page lists out &#039;&#039;optional&#039;&#039; technical requirements which aren&#039;t required to actually install and run Joomla! but are required for some dependencies running different internal APIs.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;section begin=Joomla 3.x /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 style=&amp;quot;background-color:#e1e1e1;&amp;quot; | &#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Application&amp;lt;/translate&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|JApplicationDaemon&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/pcntl&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ext/posix&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 style=&amp;quot;background-color:#e1e1e1;&amp;quot; | &#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
Archive&amp;lt;/translate&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|BZ2&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/bz2&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|GZip&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/zlib&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Zip&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/zip&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;ext/zlib&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 style=&amp;quot;background-color:#e1e1e1;&amp;quot; | &#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
Cache&amp;lt;/translate&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|APC&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/apc&amp;lt;/tt&amp;gt; on PHP 5.3 or 5.4, &amp;lt;tt&amp;gt;ext/apcu&amp;lt;/tt&amp;gt; on PHP 5.5 or 5.6, unsupported on PHP 7.x (Note: THIS NEED TO BE CHECKED)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|APCu&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s ext/apcu on PHP 5.3+&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|CacheLite&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
Requires the PEAR Cache_Lite package (tested on 1.7.16, will work with 1.8)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Memcache&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/memcache&amp;lt;/tt&amp;gt; and a Memcache server (Note: The Memcache extension is not compatible with PHP 7.x)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Memcached&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/memcached&amp;lt;/tt&amp;gt; and a Memcached server&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Redis&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/redis&amp;lt;/tt&amp;gt; and a Redis server&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Wincache&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/wincache&amp;lt;/tt&amp;gt; (Windows only)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|XCache&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/xcache&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 style=&amp;quot;background-color:#e1e1e1;&amp;quot; | &#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
Client adapters&amp;lt;/translate&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|LDAP&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/ldap&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|HTTP/Curl&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/curl&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|HTTP/Socket&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;fsockopen()&amp;lt;/tt&amp;gt; function be enabled&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|HTTP/Stream&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;fopen()&amp;lt;/tt&amp;gt; function and &amp;lt;tt&amp;gt;allow_url_fopen&amp;lt;/tt&amp;gt; enabled&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 style=&amp;quot;background-color:#e1e1e1;&amp;quot; | &#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
Cryptography&amp;lt;/translate&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|JCrypt&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/mcrypt&amp;lt;/tt&amp;gt; for all ciphers except the SodiumCipher which requires &amp;lt;tt&amp;gt;ext/sodium&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|JKeychain&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/openssl&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 style=&amp;quot;background-color:#e1e1e1;&amp;quot; | &#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
Database&amp;lt;/translate&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Microsoft SQL Azure&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/sqlsrv&amp;lt;/tt&amp;gt; (the PHP 5.x extension only supports Windows, a Linux compatible version of the extension is available for PHP 7.x)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Microsoft SQL Server&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/sqlsrv&amp;lt;/tt&amp;gt; (the PHP 5.x extension only supports Windows, a Linux compatible version of the extension is available for PHP 7.x)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|MySQL&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/mysql&amp;lt;/tt&amp;gt; (unsupported on PHP 7.x)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|MySQLi&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/mysqli&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Oracle&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/pdo&amp;lt;/tt&amp;gt; with Oracle support (available for 3PD only; the CMS won&#039;t run with it)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|PDO MySQL&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/pdo&amp;lt;/tt&amp;gt; with MySQL support&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/pgsql&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|SQLite&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/pdo&amp;lt;/tt&amp;gt; with SQLite support (available for 3PD only; the CMS won&#039;t run with it)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 style=&amp;quot;background-color:#e1e1e1;&amp;quot; | &#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
Image&amp;lt;/translate&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/gd&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 style=&amp;quot;background-color:#e1e1e1;&amp;quot; | &#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
Session&amp;lt;/translate&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|APC&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/apc&amp;lt;/tt&amp;gt; on PHP 5.3 or 5.4, &amp;lt;tt&amp;gt;ext/apcu&amp;lt;/tt&amp;gt; on PHP 5.5 or 5.6, unsupported on PHP 7.x (Note: THIS NEEDS TO BE CHECKED)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Memcache&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/memcache&amp;lt;/tt&amp;gt; and a Memcache server (Note: The Memcache extension is not compatible with PHP 7.x)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Memcached&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/memcached&amp;lt;/tt&amp;gt; and a Memcached server&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Wincache&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/wincache&amp;lt;/tt&amp;gt; (Windows only)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|XCache&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
Requires PHP&#039;s &amp;lt;tt&amp;gt;ext/xcache&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 style=&amp;quot;background-color:#c1c1c1;text-align:center&amp;quot; | &#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
OPTIONAL IMPROVEMENTS&amp;lt;/translate&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 style=&amp;quot;background-color:#e1e1e1;&amp;quot; | &#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:45--&amp;gt;&lt;br /&gt;
String&amp;lt;/translate&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
Enable PHP&#039;s &amp;lt;tt&amp;gt;ext/mbstring&amp;lt;/tt&amp;gt; for the phputf8 library to use native functions&amp;lt;/translate&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=Joomla 3.x /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
[[Category:Joomla! 3.x]]&lt;br /&gt;
[[Category:Joomla! 3.5]]&lt;br /&gt;
[[Category:Joomla! 3.6]]&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:J3.8.0_LDAP&amp;diff=445643</id>
		<title>J3.x:J3.8.0 LDAP</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:J3.8.0_LDAP&amp;diff=445643"/>
		<updated>2017-09-19T19:53:26Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Mbabker moved page J3.x:J3.8.0 LDAP to J3.x:LDAP Client Missing Escape Method&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[J3.x:LDAP Client Missing Escape Method]]&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:LDAP_Client_Missing_Escape_Method&amp;diff=445642</id>
		<title>J3.x:LDAP Client Missing Escape Method</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:LDAP_Client_Missing_Escape_Method&amp;diff=445642"/>
		<updated>2017-09-19T19:53:26Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Mbabker moved page J3.x:J3.8.0 LDAP to J3.x:LDAP Client Missing Escape Method&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Start with an intro below this line --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Errors reported== &amp;lt;!-- Fill errors below --&amp;gt;&lt;br /&gt;
The LDAP authentication plugin tries to call a non-existing `escape` method on the Joomla\Ldap\LdapClient class.&lt;br /&gt;
&lt;br /&gt;
==Versions affected== &amp;lt;!--refers to and other information below --&amp;gt;&lt;br /&gt;
{{tip|This pertains only to Joomla! version(s): &#039;&#039;&#039;3.8.0&#039;&#039;&#039;|title=General Information}} &amp;lt;!-- add the version(s) you need --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==What is the cause== &amp;lt;!-- Cause if known --&amp;gt;&lt;br /&gt;
A file was not correctly updated in the 3.8.0 release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==How to fix== &amp;lt;!-- How to fix it if known --&amp;gt;&lt;br /&gt;
Replace the file at `libraries/vendor/joomla/ldap/src/LdapClient.php` with the version found at https://github.com/joomla-framework/ldap/blob/1.2.0/src/LdapClient.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Version 3.8 FAQ]]&lt;br /&gt;
[[Category:Version 3.8.0 FAQ]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Joomla! 3.8]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:LDAP_Client_Missing_Escape_Method&amp;diff=445641</id>
		<title>J3.x:LDAP Client Missing Escape Method</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:LDAP_Client_Missing_Escape_Method&amp;diff=445641"/>
		<updated>2017-09-19T19:50:52Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Start with an intro below this line --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Errors reported== &amp;lt;!-- Fill errors below --&amp;gt;&lt;br /&gt;
The LDAP authentication plugin tries to call a non-existing `escape` method on the Joomla\Ldap\LdapClient class.&lt;br /&gt;
&lt;br /&gt;
==Versions affected== &amp;lt;!--refers to and other information below --&amp;gt;&lt;br /&gt;
{{tip|This pertains only to Joomla! version(s): &#039;&#039;&#039;3.8.0&#039;&#039;&#039;|title=General Information}} &amp;lt;!-- add the version(s) you need --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==What is the cause== &amp;lt;!-- Cause if known --&amp;gt;&lt;br /&gt;
A file was not correctly updated in the 3.8.0 release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==How to fix== &amp;lt;!-- How to fix it if known --&amp;gt;&lt;br /&gt;
Replace the file at `libraries/vendor/joomla/ldap/src/LdapClient.php` with the version found at https://github.com/joomla-framework/ldap/blob/1.2.0/src/LdapClient.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Version 3.8 FAQ]]&lt;br /&gt;
[[Category:Version 3.8.0 FAQ]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Joomla! 3.8]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:LDAP_Client_Missing_Escape_Method&amp;diff=445640</id>
		<title>J3.x:LDAP Client Missing Escape Method</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:LDAP_Client_Missing_Escape_Method&amp;diff=445640"/>
		<updated>2017-09-19T19:50:14Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Start with an intro below this line --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Errors reported== &amp;lt;!-- Fill errors below --&amp;gt;&lt;br /&gt;
Currently failing with line 119 of ldap.php file, specifically the $ldap-&amp;gt;escape method that upon further inspection does not exist in the LdapClient.php file.&lt;br /&gt;
&lt;br /&gt;
==Versions affected== &amp;lt;!--refers to and other information below --&amp;gt;&lt;br /&gt;
{{tip|This pertains only to Joomla! version(s): &#039;&#039;&#039;3.8.0&#039;&#039;&#039;|title=General Information}} &amp;lt;!-- add the version(s) you need --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==What is the cause== &amp;lt;!-- Cause if known --&amp;gt;&lt;br /&gt;
A file was not correctly updated in the 3.8.0 release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==How to fix== &amp;lt;!-- How to fix it if known --&amp;gt;&lt;br /&gt;
Replace the file at `libraries/vendor/joomla/ldap/src/LdapClient.php` with the version found at https://github.com/joomla-framework/ldap/blob/1.2.0/src/LdapClient.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Version 3.8 FAQ]]&lt;br /&gt;
[[Category:Version 3.8.0 FAQ]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Joomla! 3.8]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Call_to_undefined_method_JAdminCssMenu::addChild_in_backend&amp;diff=445351</id>
		<title>J3.x:Call to undefined method JAdminCssMenu::addChild in backend</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Call_to_undefined_method_JAdminCssMenu::addChild_in_backend&amp;diff=445351"/>
		<updated>2017-09-19T15:50:11Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Categories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In Joomla! 3.8, the administrator menu module was updated to include new features. As a result of the changes, some extensions may have been broken by the 3.8 update.&lt;br /&gt;
&lt;br /&gt;
==Errors reported==&lt;br /&gt;
Call to undefined method JAdminCssMenu::addChild&lt;br /&gt;
&lt;br /&gt;
==Versions affected== &amp;lt;!--refers to and other information below --&amp;gt;&lt;br /&gt;
{{tip|This pertains only to Joomla! version(s): &#039;&#039;&#039;3.8.0&#039;&#039;&#039;|title=General Information}} &amp;lt;!-- add the version(s) you need --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==What is the cause==&lt;br /&gt;
Changes in the administrator menu module to support new features.&lt;br /&gt;
&lt;br /&gt;
==How to fix==&lt;br /&gt;
Ensure all extensions are updated prior to updating Joomla.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Version 3.8 FAQ]]&lt;br /&gt;
[[Category:Version 3.8.0 FAQ]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Joomla! 3.8]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Call_to_undefined_method_JAdminCssMenu::addChild_in_backend&amp;diff=445348</id>
		<title>J3.x:Call to undefined method JAdminCssMenu::addChild in backend</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Call_to_undefined_method_JAdminCssMenu::addChild_in_backend&amp;diff=445348"/>
		<updated>2017-09-19T15:30:23Z</updated>

		<summary type="html">&lt;p&gt;Mbabker: Create FAQ&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In Joomla! 3.8, the administrator menu module was updated to include new features. As a result of the changes, some extensions may have been broken by the 3.8 update.&lt;br /&gt;
&lt;br /&gt;
==Errors reported==&lt;br /&gt;
Call to undefined method JAdminCssMenu::addChild&lt;br /&gt;
&lt;br /&gt;
==Versions affected== &amp;lt;!--refers to and other information below --&amp;gt;&lt;br /&gt;
{{tip|This pertains only to Joomla! version(s): &#039;&#039;&#039;3.8.0&#039;&#039;&#039;|title=General Information}} &amp;lt;!-- add the version(s) you need --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==What is the cause==&lt;br /&gt;
Changes in the administrator menu module to support new features.&lt;br /&gt;
&lt;br /&gt;
==How to fix==&lt;br /&gt;
Ensure all extensions are updated prior to updating Joomla.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&amp;lt;!-- Change if needed --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbabker</name></author>
	</entry>
</feed>