I have found the source of the error and I believe it to be a bug with ExpressionEngine. I will explain this to the best of my abilities, please feel free to improve the readability of my answer if necessary.
The following is important:
- Custom channel.
- Custom field group.
- Custom field layout for "Edit Content" control panel page.
- I had a custom field that was using the built-in "Radio" field type.
I then installed the P&T alternative fields and switched from "Radio" to "P&T Radio". When I went to the edit screen I amended the arrangement of fields for easier input. From this point I was not able to create new content in my channel nor edit existing content.
How I diagnosed this:
- I looked into the "content_publish.php" script because the name
content_publish
appeared within the URL: admin.php?S=0&D=cp&C=content_publish&M=entry_form&channel_id=2
- I found the method
entry_form
and stuck lots of echo
lines in there to see what was going on. It seemed that the form was failing validation tests.
- I then removed all of the custom fields from my custom field group and performed the same action. Again the form was still failing validation (but with no useful errors, and there is a reason for this which I found shortly later).
- I examined the HTML of the edit page itself and after about an hour of pulling my hair out I realised that the form still contained all of the fields that I had deleted. So I reset my custom field layout via the expandable toolbar and all of the fields amazingly reappeared (even though they don't exist anymore!)
The Problem:
When custom fields are removed or changed the custom layout data is not automatically updated. However, the custom layout data is being used to prepare the form and because the data is inaccurate (contains fields that have been removed, and is invalid where field types have been changed) the form never validates.
But because the fields are not defined any more it was not possible for EE to deliver meaningful validation messages. Though some sort of error message would have been useful :/
The Solution:
I restored my database back to its "broken" state and then:
- Navigated to the "Edit Content" page.
- Expanded the tool bar and clicked "Reset Layout".
Resetting the layout worked this time because I hadn't removed any fields.
Now I have to reconfigure that layout AGAIN! and I suspect that it will break again in the future for the exact same reasons.