/**
  * Returns the list of items for one model.
  *
  * The return have:
  *  - The metadata of each field.
  *  - The data of all the rows.
  *  - The number of rows.
  *
  * The function use Phprojekt_ModelInformation_Default::ORDERING_LIST for get and sort the fields.
  *
  * OPTIONAL request parameters:
  * <pre>
  *  - integer <b>id</b>     List only this id.
  *  - integer <b>nodeId</b> List all the items with projectId == nodeId.
  *  - integer <b>count</b>  Use for SQL LIMIT count.
  *  - integer <b>offset</b> Use for SQL LIMIT offset.
  *  - integer <b>userId</b> UserId of the user requesting the list (for proxy mode).
  *  - boolean <b>recursive</b> Include items of subprojects.
  * </pre>
  *
  * The return is in JSON format.
  *
  * @return void
  */
 public function jsonListAction()
 {
     $userId = $this->getRequest()->getParam('userId', Phprojekt_Auth_Proxy::getEffectiveUserId());
     if (!Cleaner::validate('int', $userId)) {
         throw new Zend_Controller_Action_Exception("Invalid userId '{$userId}'", 400);
     }
     $userId = (int) $userId;
     if (!Phprojekt_Auth_Proxy::hasProxyRightForUserById($userId)) {
         throw new Zend_Controller_Action_Exception("Current user has no proxy rights for this user {$userId}", 403);
     } else {
         Phprojekt_Auth_Proxy::switchToUserById($userId);
     }
     parent::jsonListAction();
 }