function __construct($request, $assocType, $assocId, $stageId, $queryId = null)
{
parent::__construct('controllers/grid/queries/form/queryForm.tpl');
$this->setStageId($stageId);
$queryDao = DAORegistry::getDAO('QueryDAO');
if (!$queryId) {
$this->_isNew = true;
// Create a query
$query = $queryDao->newDataObject();
$query->setAssocType($assocType);
$query->setAssocId($assocId);
$query->setStageId($stageId);
$query->setSequence(REALLY_BIG_NUMBER);
$queryDao->insertObject($query);
$queryDao->resequence($assocType, $assocId);
// Add the current user as a participant by default.
$queryDao->insertParticipant($query->getId(), $request->getUser()->getId());
// Create a head note
$noteDao = DAORegistry::getDAO('NoteDAO');
$headNote = $noteDao->newDataObject();
$headNote->setUserId($request->getUser()->getId());
$headNote->setAssocType(ASSOC_TYPE_QUERY);
$headNote->setAssocId($query->getId());
$headNote->setDateCreated(Core::getCurrentDate());
$noteDao->insertObject($headNote);
} else {
$query = $queryDao->getById($queryId, $assocType, $assocId);
assert(isset($query));
// New queries will not have a head note.
$this->_isNew = !$query->getHeadNote();
}
$this->setQuery($query);
// Validation checks for this form
$this->addCheck(new FormValidatorListbuilder($this, 'users', 'stageParticipants.notify.warning'));
$this->addCheck(new FormValidator($this, 'subject', 'required', 'submission.queries.subjectRequired'));
$this->addCheck(new FormValidator($this, 'comment', 'required', 'submission.queries.messageRequired'));
$this->addCheck(new FormValidatorPost($this));
$this->addCheck(new FormValidatorCSRF($this));
}