The goal of this modification is to have two types of contacts (Internal and External):
1) Internal contacts are in fact people who are from the company (users of application).
2) External contacts are contacts to people from other companies (suppliers, partners, clients, etc.).
Internal contact must be non editable. Only the admin can edit these contacts. Later, we will use csv import in order to keep these internal contacts updated. Only administrator will do this. Add a checkbox to Contact type (editable / non-editable).
If a contact type is non-editable, this contact can not be edited, even if in roles and permissions user will have a permission to edit contacts. In roles & permissions we will set that all users have a permissions to edit contacts. In fact, thanks to this custom devel, it will mean that they can only edit external contact. Internal contact will use a checkbox "non-editable" (new feature), that will make internal contact non editable.
Moreover, we need to have a chance to use journal (comments) for these internal contacts. External contacts will be editable. Any user with a permission (roles & permissions) to edit contact can edit them (and write a comment in journal as well).