CRM-16819 improve on CRM_Utils_Request::retrieve
authoreileen <emcnaughton@wikimedia.org>
Wed, 15 Nov 2017 23:42:07 +0000 (12:42 +1300)
committereileen <emcnaughton@wikimedia.org>
Thu, 16 Nov 2017 00:26:09 +0000 (13:26 +1300)
commit5e4ccea58c6c9b87b11cd7e60f5dfeed3dbe7ef8
tree1d809821b7959aadc4167f742cb334b94e42d9cb
parentb160ca4781eaefedb82ffdebe8b2bb42eb5f7403
CRM-16819 improve on CRM_Utils_Request::retrieve

I'm proposing this as an improved (but not perfect) way to retrieve data from http requests.

The biggest issue IMHO with the CRM_Utils_Request::retrieve method is that the third
parameter is & - and if any of the subsequent parameters need to be passed a NULL
array must be generated. The practice of passing a specific static NULL array is known to
have caused errors due to contamination. This commit offers an alternate function without that
parameter (my suggestion is to create a new function again where we really do want  to
work but in general it seems flakey to me). I have also re-ordered the parameters as I perceive
 as being more commonly required than  (renamed from 'abort').

I have also made it so the new function will throw an exception rather than use the deprecated
fatal - as a new function I feel we can enforce this change and I have made some changes
to the error message thrown in the validate function so it returns a list of permissable
values for the  string as the existing error is hard for developers to work with, as it
can be hard to realise why 'int' is wrong (casing) or what should have been passed.

Finally I made the visibility on CRM_Utils_Retrieve::getValues protected. This function
is not called from within core & is downright unsafe as it does no validation so we should
not permit anyone to accidentally use it (I have no reason to think they have
CRM/Contact/Page/DedupeMerge.php
CRM/Utils/Request.php
CRM/Utils/Type.php