
  PROFILE MODULES DEVELOPER NOTES:

    To build a Profile Manager module able to handle dynamic fields connected with the Users module,
    it needs some specific methods functions explained below. It's recommended to hable the Users properties
    as attributes, because the Core handles them automatically with the pnUserGet/Set* functions.
    The module should support the following methods:

    * form.edit:
      A function that outputs the dynamic data section in the register/create/edit forms.
      Field names must be dyndata[prop_name] to handle the dyndata array in the API function.
      Ideally it must check that it's not the current module to avoid direct access.

    * form.search:
      A function that outputs the dynamic data section in the search forms.
      Field names must be dyndata[prop_name] to handle the dyndata array in the API function.
      Ideally it must check that it's not the current module to avoid direct access.

    * form.display:
      A function that outputs the dynamic data to fill a z-datatable with the passed data.
      Ideally it must check that it's not the current module to avoid direct access.

    * userapi.checkrequired:
      A function that check the required profile fields and returns false if all is Ok
      or in case of error returns an array like this:
        array(
              'result' => true,
              'fields' => array('prop_attribute_name', 's'),
              'translatedFields' => array('prop_label', 's')
             )

    * userapi.insertdyndata:
      A function that returns the dynamic data to insert in the Users object after the creation/edit submit.
      This function receives all the user data as $args.
      Optinally receives $args['dynadata'], if not, takes them of the input parameters.

    * userapi.searchdyndata:
      A function that retrieves an array of UIDs with the matching users according to the dynadata parameter,
      that can be passed directly or from the input parameters.
      dynadata parameter is an array of the form array('prop_label' => 'prop_value_to_search').
      can be also a single-element array as array('all' => 'search_value') to search through all the user attributes.
      THe profile module decide which fields to search when 'all' is passed, because it's the Users search function.

