Generally, you can change Redmine in one of two ways:
- You can develop a plugin which can extend or overwrite functionality in Redmine core.
- You can patch Redmine itself and add any changes directly to the Redmine codebase.
Generally, the first approach of developing a plugin should be preferred. This is because it allows you to update Redmine later with minimal issues. If you change the Redmine codebase itself, it becomes very hard to update it later while keeping your changes and ensuring they still work.
There is a huge amount of existing Redmine plugins (of varying quality). Generally, it is a good idea to search a bit for related plugins and read their source code to get a feeling how plugins work.