Rather than have hooks *everywhere* use a single set stock function in admin and on the frontend Closes #3593