You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
3.3 KiB
121 lines
3.3 KiB
<?php
|
|
|
|
/* For licensing terms, see /license.txt */
|
|
|
|
use Chamilo\CoreBundle\Entity\Asset;
|
|
use Chamilo\CoreBundle\Entity\AttemptFile;
|
|
use Chamilo\CoreBundle\Entity\TrackEAttempt;
|
|
use Chamilo\CoreBundle\Framework\Container;
|
|
use Symfony\Component\Uid\Uuid;
|
|
|
|
/**
|
|
* Class OralExpression
|
|
* This class allows to instantiate an object of type FREE_ANSWER,
|
|
* extending the class question.
|
|
*
|
|
* @author Eric Marguin
|
|
*/
|
|
class OralExpression extends Question
|
|
{
|
|
public $typePicture = 'audio_question.png';
|
|
public $explanationLangVar = 'Oral expression';
|
|
public $available_extensions = ['wav', 'ogg'];
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->type = ORAL_EXPRESSION;
|
|
$this->isContent = $this->getIsContent();
|
|
}
|
|
|
|
public function createAnswersForm($form)
|
|
{
|
|
$form->addText(
|
|
'weighting',
|
|
get_lang('Score'),
|
|
['class' => 'span1']
|
|
);
|
|
global $text;
|
|
// setting the save button here and not in the question class.php
|
|
$form->addButtonSave($text, 'submitQuestion');
|
|
if (!empty($this->id)) {
|
|
$form->setDefaults(['weighting' => float_format($this->weighting, 1)]);
|
|
} else {
|
|
if (1 == $this->isContent) {
|
|
$form->setDefaults(['weighting' => '10']);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function processAnswersCreation($form, $exercise)
|
|
{
|
|
$this->weighting = $form->getSubmitValue('weighting');
|
|
$this->save($exercise);
|
|
}
|
|
|
|
public function return_header(Exercise $exercise, $counter = null, $score = [])
|
|
{
|
|
$score['revised'] = $this->isQuestionWaitingReview($score);
|
|
$header = parent::return_header($exercise, $counter, $score);
|
|
$header .= '<table class="'.$this->questionTableClass.'">
|
|
<tr>
|
|
<th>'.get_lang('Answer').'</th>
|
|
</tr>';
|
|
|
|
return $header;
|
|
}
|
|
|
|
/**
|
|
* Return the HTML code to show the RecordRTC/Wami recorder.
|
|
*/
|
|
public function returnRecorder(int $trackExerciseId): string
|
|
{
|
|
$recordAudioView = new Template(
|
|
'',
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
false
|
|
);
|
|
|
|
$recordAudioView->assign('type', Asset::EXERCISE_ATTEMPT);
|
|
$recordAudioView->assign('t_exercise_id', $trackExerciseId);
|
|
$recordAudioView->assign('question_id', $this->id);
|
|
|
|
$template = $recordAudioView->get_template('exercise/oral_expression.html.twig');
|
|
|
|
return $recordAudioView->fetch($template);
|
|
}
|
|
|
|
public static function saveAssetInQuestionAttempt($attemptId)
|
|
{
|
|
$em = Container::getEntityManager();
|
|
|
|
$attempt = $em->find(TrackEAttempt::class, $attemptId);
|
|
|
|
$variable = 'oral_expression_asset_'.$attempt->getQuestionId();
|
|
|
|
$asset = null;
|
|
$assetId = ChamiloSession::read($variable);
|
|
if (!empty($assetId)) {
|
|
$asset = Container::getAssetRepository()->find(Uuid::fromRfc4122($assetId));
|
|
}
|
|
|
|
if (null === $asset) {
|
|
return;
|
|
}
|
|
|
|
ChamiloSession::erase($variable);
|
|
|
|
$attemptFile = (new AttemptFile())
|
|
->setAsset($asset)
|
|
;
|
|
|
|
$attempt->addAttemptFile($attemptFile);
|
|
|
|
$em->persist($attemptFile);
|
|
$em->flush();
|
|
}
|
|
}
|
|
|