On Firefox, at least, the image input button created by `/widgets/profile/button.mc` was causing subsequent calls to `form.submit()` to fail. For example, if you deleted a category and then hit the "Note" button, which calls `customSubmit()`, which calls `form.submit()`, the submit would fail. There would be no submit at all. I could not figure out why. Near as I can tell, hitting an image input and then not actually submitting causes the `form.submit()` DOM method to be disabled. But if you hit some other form method, it worked. NFI why. So work around it by using an image submit link rather than input control. The functionality is the same, but does not break subsequent calls to `form.submit()` by other controls. I'm not altogether happy with this solution, but I can't see any other way around it without digging into the guts of Firefox, which I don't know at all. Better, down the line, might be to alter the behavior of the Notes, Trail, Bulk Edit, and Diff/View buttons so that they don't do submits, but open a popover window or div. But that's a significan revision for another day (and wouldn't fix existing releases anyway, being new features). So this will have to do. [#281 state:closed]
Has been broken by the HTML 5 standard, which has image inputs no longer submit their values, but their .x and .y positions. This is annoying, and more like how IE has always behaved. In [this commit](534e739) (and others like it for media nd templates), Scott fixed a bug related to get the Return button to work on the diff view. Removing that change fixes the view Return button, but breaks the Diff return button. So switch to using a very simple image link for the Diff page return button instead of the image input. That works on any browser, and so now the Return button should work properly both when viewing assets and when viewing diffs. [#240 state:closed]
There are two disconnected places in the databases where the assets on desks are tracked. One is the `desk__id` column in the `story`, `media`, and `template` tables. The other is "asset groups." These are kind of nasty, but necessary in order for permissions to work properly. Unfortunately, these two sources can drift from one another. So this commit adds a migration that corrects any existing drift, and then adds triggers to prevent it in the future. This required a few other changes: * The installer now installs PL/pgSQL, which is required for the trigger functions. If the database is created in advance, it must include PL/pgSQL or the installation will fail. * Bric::Biz::Workflow::Parts::Desk now has to save its corresponding asset group before it saves the assets in that group with new IDs. This won't usually be necessary, since the trigger executes at transaction commmit time, but tests run under autocommit, and so generated quite a lot of errors. By making the order of execution a little saner, the errors go away and all tests pass. For now, there are no corresponding triggers for MySQL. I *think* MySQL 5 can do the same thing (or close to it), but I don't have the energy to figure out how just now. [#272 state:resolved]
Still with `PUBLISH_RELATED_FAIL_BEHAVIOR = fail`, make sure publishes that fail because realteds fail to publish works properly both from desks and from document profiles. While at it, I filled in some other gaps in the publish logging and rollback logic in the Desk callback. [#277 state:open]
More work on [#277 state:open].
With `PUBLISH_RELATED_FAIL_BEHAVIOR = fail`, things work fine now when publishing via "Check in and Publish" in the story profile and when selecting that option on a desk or workflow, which is an Ajax call. One side effect is that if the publish fails because the story itself fails to publish (rather than because a related fails), the story is instantly checked out to the user again and put back into workflow. In the interrim, the asset will have been checked in, so the result is a new version number. I think that this is a very minor issue that most folks won't even notice, and is far better than what we had, where things were checked in and sometimes removed from workflow. This is better: other than the new version, it looks like the same page as before, with all the same data, but a nice status message explaining the failure. In order to properly catch an error when there are no destinations, that exception is now thorwn as an "invalid error" exception rather than a fatal exception. That indicates that it's something to inform the user of, rather than something unexpected (which is a 500). Looking at it, I think it was silly to have been throwing a burn error for that particular error; an invalid error is a much better choice. Still to do to finish fixing this bug: * Fix media to follow the same pattern. * Make sure that `PUBLISH_RELATED_FAIL_BEHAVIOR = warn` works as expected * Make sure that publishing from search results works as expected * Make sure that bulk publish works as expected. * Make sure all tests continue to pass. [#277 state:open]
This fixes the half of bug #277, when one attempts to publish from a desk or workspace. When `PUBLISH_RELATED_FAIL_BEHAVIOR = fail` and a related asset fails to publish, we now call `raise_conflict` to return a 409 and do a better job displaying *all* the appropriate error messages. When `PUBLISH_RELATED_FAIL_BEHAVIOR = warn` and related asset fails to publish, we call a new moethod, `show_accepted()`. This method returns a 202 status code, which I'm abusing a bit here, but it comes closest to what we want. The story properly publishes and disappears from the desk, but a new handler in the Ajax code also shows the errors when related failed to publish. I also added code to abort at the end of the Desk `publish` callback when a request is Ajax so that no other stuff gets sent back to the browser. This is because in "warn" mode, we wnt the full request to succeed, with no rollbacks or anything, and all subsequent code should execute, so that the story will properly be published and removed from workflow. Tomorrow I'll have to figure out what to do about non-ajax publish requests in order to properly and finally fix bug # 277.