Actions

Backend Ajax protocol

From LimeSurvey Manual

Revision as of 19:56, 28 September 2016 by Olle (talk | contribs) (→‎Discussion)

Discussion

There should be a standard JSON protocol between the LS backend and Ajax calls to check for errors, permissions and if the user still is logged in. A suggestion would be to wrap $.ajax in a function that checks this for you, like LS.ajax.

All server Ajax calls must return a JSON in the following format:

{
  type: int,
  result: mixed,
  error: {code: int, message: string},
  loggedIn: boolean,
  hasPermission: boolean,
}

Of course there needs to be server side support for this protocol, too, with helper functions to output correct JSON code, e.g. Ajax::outputResult or Ajax::outputError($code, $message).

Preferably, the function should be able to show an error if server throws 500.

Message types

Type Description
notloggedin User is not logged in; the login form should appear in a modal and then continue with the action
nopermission No permission
success Show success message
error Show error message
custom Custom action, meaning a supplied Javascript function will take care of the result, e.g. feeding HTML to a modal body

Backbone

Since Javascript library Backbone might be used in the future, it would be nice to know how they handle stuff like this.

Some questions:

  • Would we need to duplicate the model code in both backend and frontend?
  • How much of the CRUD will happen on client?
  • How much would backbone replace Yii and things generated with Gii?

Learning material

TODO

Implementation

A first prototype of the backend classes can be seen here. Instead of a helper, this class can actually be put into LSYiiController, making it available to all controllers in LS.

Example:

public function indexAction()
{
  $this->ajax->outputSucces(gT('Success!'));
}