Object::extend already does a check for NULL before it adds the results
to the array of return values. This was required for Translatable as the
result from Translatable::augmentValidURLSegment was being ignored.
https://github.com/silverstripe/sapphire/pull/827 adds some extension points for catching HTTP errors such as 404. This change fixes some issues where httpError() isn't used all the time. Note that the aforementioned pull request will be necessary to ensure that it works properly.
setFolderName expects a folder name relative to the root. Specifying
ASSETS_DIR will create a duplicate folder called "assets", so the
file gets uploaded into "assets/assets". Specifying "/" means the
file will get uploaded into the root instead, which is correct.
Ideally we could do this without session, but pragmatically
we still need it, because of the inflexible routing system,
and because of performance considerations.
Example: The tree is lazy loaded via a generic URL (admin/pages/treeview).
While we could add ?ID=<currentpage> to make the view (more or less) stateless,
it would trigger a full tree reload on every tree navigation action.
Instead, we assume that all "reachable" nodes are already cached,
and simply mark a different one as current. For this to work, we need
shared session state between CMS controllers.
See http://open.silverstripe.org/ticket/7815 for detail.
Related to #7740. The sort field gets stale if the current
record is moved in the tree. Since the sort value can't
be altered by interacting with the form, its not required
as a hidden field, either.
Was fetching the record from live (and its direct URLSegment),
but all of its parents from the current stage, which might be draft,
leading to "mixed" draft/live nested URLs which might no longer
be reachable in live mode.
By renaming fields to "StageLink" and "LiveLink",
which means they don't get influenced by the model getters
on Form->loadDataFrom(). Its also a more accurate
name for the field value, since it contains a full (nested) URL
rather than just a segment. Only used internally, so no API change.
Removed ineffective FieldGroup->subfieldParam setting,
replaced with a specialised template, as well as a new "stacked" styling
(both added to framework codebase)
Installer was feeing the title "Title" to the template. Template
rearranged for usability concerns (people were missing the email and
password when going to the CMS login page)
translations were not added in the same translation group, and the
translation module didn't work. Also commited changes in the translation module, which will need this commit.
Called for each subclass by the collector,
so we don't need to aggregate here.
In fact, its harmful because it causes entities
to be placed in the wrong definitions file.
The <class>.DESCRIPTION entity was always placed in cms/lang/en.yml,
regardless of the original location of the file containing the class.
Allow loading a SiteConfig by ID (by specifying $tree_class),
and pass the ID through with the form data. Unifies processing
with SiteTree, and allows the Translatable module
to use the same logic for interacting with the load/save process.
Mainly to make it compatible with the Translatable
extension linking to existing translations of it,
but also to make it work similarly to the SiteTree logic elsewhere.
- Use DataQuery for generating the search query.
- For custom field matching, use searchcontext rather than a LIKE query.
- Added an extension hook for updating the search form.
The specific situation is if the SearchForm.ss is overriden, and the
$SearchQuery parameter is used in the template. This will throw a Notice
in case the form is rendered without searching.
It is already applied to the parent template container,
which means that tab state finds two nested sets,
setting the wrong id (#Root instead of #pages-controller-cms-content
The ".action-detail" link behaviour overloads GridField's
showDetailForm() method, which in turn appends any query params
to the URL (including the existing search params).
Had the pjax "CurrentForm" marker set to the <form> tag,
which makes sense, but excludes the tabs. On refresh,
the tabset wasn't reinitialized, showing all form elements on
one page. Its easier to simply refresh the whole content area.
- Moved report table generation back to its original location in Report->getCMSFields(),
in order to keep it customisable rather than duplicating it in ReportAdmin.
- Using History.js to set URL state and reload panel
- Namespacing filter GET parameters in order to only include them in URL state
7427 was mostly fixed by Ingos previous patch. But two batch actions, delete from draft site and delete from published site werent returning
status messages. Abstracted out the status preperation code that the batch actions that were returning status messages were using, and
used that to add status messages to the problem two
The widget functionality has been moved into a module, and this URL handler was the last of the code still in the core app related to widgets. As well as this commit, there is a related change to the silverstripe-widgets module to add this feature there: 025ee424c4