Contributing to CodeIgniter
***************************

* Writing CodeIgniter Documentation

* Developer’s Certificate of Origin 1.1

CodeIgniter is a community driven project and accepts contributions of
code and documentation from the community. These contributions are
made in the form of Issues or Pull Requests on the CodeIgniter
repository on GitHub.

Issues are a quick way to point out a bug. If you find a bug or
documentation error in CodeIgniter then please check a few things
first:

* There is not already an open Issue

* The issue has already been fixed (check the develop branch, or look
  for closed Issues)

* Is it something really obvious that you fix it yourself?

Reporting issues is helpful but an even better approach is to send a
Pull Request, which is done by “Forking” the main repository and
committing to your own copy. This will require you to use the version
control system called Git.


Support
=======

Please note that GitHub is not for general support questions! If you
are having trouble using a feature of CodeIgniter, ask for help on our
forums instead.

If you are not sure whether you are using something correctly or if
you have found a bug, again - please ask on the forums first.


Security
========

Did you find a security issue in CodeIgniter?

Please *don’t* disclose it publicly, but e-mail us at
security@codeigniter.com, or report it via our page on HackerOne.

If you’ve found a critical vulnerability, we’d be happy to credit you
in our *ChangeLog <../changelog>*.


Tips for a Good Issue Report
============================

Use a descriptive subject line (eg parser library chokes on commas)
rather than a vague one (eg. your code broke).

Address a single issue in a report.

Identify the CodeIgniter version (eg 3.0-develop) and the component if
you know it (eg. parser library)

Explain what you expected to happen, and what did happen. Include
error messages and stacktrace, if any.

Include short code segments if they help to explain. Use a pastebin or
dropbox facility to include longer segments of code or screenshots -
do not include them in the issue report itself. This means setting a
reasonable expiry for those, until the issue is resolved or closed.

If you know how to fix the issue, you can do so in your own fork &
branch, and submit a pull request. The issue report information above
should be part of that.

If your issue report can describe the steps to reproduce the problem,
that is great. If you can include a unit test that reproduces the
problem, that is even better, as it gives whoever is fixing it a
clearer target!


Guidelines
==========

Before we look into how, here are the guidelines. If your Pull
Requests fail to pass these guidelines it will be declined and you
will need to re-submit when you’ve made the changes. This might sound
a bit tough, but it is required for us to maintain quality of the
code-base.


PHP Style
---------

All code must meet the Style Guide, which is essentially the Allman
indent style, underscores and readable operators. This makes certain
that all code is the same format as the existing code and means it
will be as readable as possible.


Documentation
-------------

If you change anything that requires a change to documentation then
you will need to add it. New classes, methods, parameters, changing
default values, etc are all things that will require a change to
documentation. The change-log must also be updated for every change.
Also PHPDoc blocks must be maintained.


Compatibility
-------------

CodeIgniter recommends PHP 5.6 or newer to be used, but it should be
compatible with PHP 5.3.7 so all code supplied must stick to this
requirement. If PHP 5.4 (and above) functions or features are used
then there must be a fallback for PHP 5.3.7.


Branching
---------

CodeIgniter uses the Git-Flow branching model which requires all pull
requests to be sent to the “develop” branch. This is where the next
planned version will be developed. The “master” branch will always
contain the latest stable version and is kept clean so a “hotfix”
(e.g: an emergency security patch) can be applied to master to create
a new version, without worrying about other features holding it up.
For this reason all commits need to be made to “develop” and any sent
to “master” will be closed automatically. If you have multiple changes
to submit, please place all changes into their own branch on your
fork.

One thing at a time: A pull request should only contain one change.
That does not mean only one commit, but one change - however many
commits it took. The reason for this is that if you change X and Y but
send a pull request for both at the same time, we might really want X
but disagree with Y, meaning we cannot merge the request. Using the
Git-Flow branching model you can create new branches for both of these
features and send two requests.


Signing
-------

You must sign your work, certifying that you either wrote the work or
otherwise have the right to pass it on to an open source project. git
makes this trivial as you merely have to use *–signoff* on your
commits to your CodeIgniter fork.

   git commit --signoff

or simply

   git commit -s

This will sign your commits with the information setup in your git
config, e.g.

   Signed-off-by: John Q Public <john.public@example.com>

If you are using Tower there is a “Sign-Off” checkbox in the commit
window. You could even alias git commit to use the -s flag so you
don’t have to think about it.

By signing your work in this manner, you certify to a “Developer’s
Certificate of Origin”. The current version of this certificate is in
the Developer’s Certificate of Origin 1.1 file in the root of this
documentation.
