quizes = &$_quizes;
}
public function makeTranslatable() {
foreach($this->quizes as $k => $v) {
// process each H5P activity
if(!empty($v["jsonContent"])) {
$content_array = json_decode($v["jsonContent"], true);
// used to identify strings to translate
// error_log(print_r($content_array,true));
//
if(empty($v['library'])) { continue; }
switch($v['library']) {
// process based on H5P activity type and version
case "H5P.InteractiveVideo 1.19":
$this->addKeysForInteractiveVideo($content_array);
break;
case "H5P.CoursePresentation 1.19":
$this->addKeysForCoursePresentation($content_array);
break;
case "H5P.QuestionSet 1.15":
$this->addKeysForQuestionSet($content_array);
break;
case "H5P.PersonalityQuiz 1.0":
$this->addKeysForPersonalityQuiz($content_array);
break;
case "H5P.DocumentationTool 1.6":
$this->addKeysForDocumentationTool($content_array);
break;
case "H5P.Essay 1.0":
$this->addKeysForEssay($content_array);
break;
case "H5P.ImagePair 1.4":
$this->addKeysForImagePair($content_array);
break;
case "H5P.Dialogcards 1.6":
$this->addKeysForDialogcards($content_array);
break;
case "H5P.MemoryGame 1.2":
$this->addKeysForMemoryGame($content_array);
break;
case "H5P.Timeline 1.1":
$this->addKeysForTimeline($content_array);
break;
}
$this->addKeysFor_l10n($content_array);
$this->quizes[$k]["jsonContent"] = json_encode($content_array);
}
if(!empty($v["metadata"])) {
$this->quizes[$k]["metadata"]["gt_translate_keys"] = ["title"];
}
$this->quizes[$k]["gt_translate_keys"] = ["title", ["key" => "jsonContent", "format" => "json"]];
}
}
public function addKeysForCoursePresentation(&$contentArr) {
if( !empty($contentArr["presentation"]['slides']) ) {
foreach($contentArr["presentation"]['slides'] as $k => $v){
if( !empty($v["elements"]) ) {
array_walk($contentArr["presentation"]['slides'][$k]["elements"], function(&$item, $key) {
if( !empty($item["action"]) ) $this->addKeysForElementsBasedOnElement( $item["action"] );
});
}
}
}
}
public function addKeysForInteractiveVideo(&$contentArr) {
if(!empty($contentArr["interactiveVideo"]['assets']) && !empty($contentArr["interactiveVideo"]['assets']['interactions']) ) {
array_walk($contentArr["interactiveVideo"]['assets']['interactions'], function(&$item, $key) {
$this->addKeysForElementsBasedOnElement( $item["action"] );
});
}
if(!empty($contentArr["interactiveVideo"]['assets']) && !empty($contentArr["interactiveVideo"]['assets']['bookmarks']) ) {
array_walk($contentArr["interactiveVideo"]['assets']['bookmarks'], function(&$item, $key) {
$item["gt_translate_keys"] = ["label"];
});
}
if(!empty($contentArr["interactiveVideo"]['summary']) && !empty($contentArr["interactiveVideo"]['summary']['task']) && !empty($contentArr["interactiveVideo"]['summary']['task']['params']) ) {
$trans_keys = [];
array_walk($contentArr["interactiveVideo"]['summary']['task']['params'], function(&$item, $key) use (&$trans_keys){
if(is_string($item)) $trans_keys[] = $key;
});
$contentArr["interactiveVideo"]['summary']['task']['params']["gt_translate_keys"] = $trans_keys;
}
}
public function addKeysForQuestionSet(&$contentArr) {
if( !empty($contentArr["texts"]) ) {
$contentArr["texts"]["gt_translate_keys"] = array_keys( $contentArr["texts"] );
}
if( !empty($contentArr["endGame"]) ) {
$contentArr["endGame"]["gt_translate_keys"] = ["finishButtonText", "message", "noResultMessage", "retryButtonText", "skipButtonText", "solutionButtonText"];
}
if( !empty($contentArr["introPage"]) ) {
$contentArr["introPage"]["gt_translate_keys"] = ["startButtonText"];
}
if( !empty($contentArr["questions"]) ) {
foreach($contentArr["questions"] as $k => $v) {
if(empty($v['library'])) continue;
switch($v['library']) {
case "H5P.DragQuestion 1.12":
$contentArr["questions"][$k]["params"]["gt_translate_keys"] = ["correctAnswer", "dropzonePrefix", "feedbackHeader", "grabbablePrefix", "grabbableSuffix", "noDropzone", "scoreBarLabel", "scoreExplanation", "scoreExplanationButtonLabel", "scoreShow", "tipAvailable", "tipLabel", "tryAgain", "wrongAnswer"];
if(!empty($contentArr["questions"][$k]["params"]["localize"])) {
$contentArr["questions"][$k]["params"]["localize"]["gt_translate_keys"] = ["exitFullscreen", "exitFullscreen"];
}
if(!empty($contentArr["questions"][$k]["params"]["overallFeedback"])) {
foreach($contentArr["questions"][$k]["params"]["overallFeedback"] as $k2 => $v2)
$contentArr["questions"][$k]["params"]["overallFeedback"][$k2]["gt_translate_keys"] = ["feedback"];
}
if(!empty($contentArr["questions"][$k]["params"]["question"])) {
if(!empty($contentArr["questions"][$k]["params"]["question"]["settings"])) {
$contentArr["questions"][$k]["params"]["question"]["settings"]["gt_translate_keys"] = ["questionTitle"];
}
if(!empty($contentArr["questions"][$k]["params"]["question"]["task"]) && !empty($contentArr["questions"][$k]["params"]["question"]["task"]["dropZones"]) ) {
foreach($contentArr["questions"][$k]["params"]["question"]["task"]["dropZones"] as $k2 => $v2)
$contentArr["questions"][$k]["params"]["question"]["task"]["dropZones"][$k2]["gt_translate_keys"] = [["key" => "label", "format" => "html"]];
}
}
break;
case "H5P.MarkTheWords 1.8":
$contentArr["questions"][$k]["params"]["textField"] = preg_replace('/(\*.[^\*]*\*)/', '$1', $contentArr["questions"][$k]["params"]["textField"] ); //Check this logic, doesn't work properly.
$contentArr["questions"][$k]["params"]["gt_translate_keys"] = ["checkAnswerButton", "correctAnswer", "displaySolutionDescription", "incorrectAnswer", "missedAnswer", "scoreBarLabel", "showSolutionButton", "tryAgainButton", ["key" => "taskDescription", "format" => "html"], ["key" => "textField", "format" => "html"]];
break;
case "H5P.DragText 1.7":
$contentArr["questions"][$k]["params"]["textField"] = preg_replace('/(\*.[^\*]*\*)/', '$1', $contentArr["questions"][$k]["params"]["textField"] ); //Check this logic, doesn't work properly.
$contentArr["questions"][$k]["params"]["gt_translate_keys"] = ["cancelledDragging", "checkAnswer", "contains", "correctAnswer", "correctText", "draggableIndex", "dropZoneIndex", "empty", "feedbackHeader", "grabbed", "incorrectText", "resetDropDescription", "resetDropTitle", "scoreBarLabel", "showSolution", "tipLabel", "tryAgain", ["key" => "textField", "format" => "html"], ["key" => "taskDescription", "format" => "html"]];
break;
}
}
}
}
public function addKeysForPersonalityQuiz(&$contentArr) {
$contentArr["gt_translate_keys"] = ["startText", "retakeText", "progressText"];
if( !empty($contentArr["titleScreen"]) && !empty($contentArr["titleScreen"]["title"])) {
$contentArr["titleScreen"]["title"]["gt_translate_keys"] = ["text"];
}
if( !empty($contentArr["personalities"]) ) {
array_walk($contentArr["personalities"], function(&$item, $key) {
$item["gt_translate_keys"] = ["name", "description"];
});
}
if( !empty($contentArr["questions"]) ) {
foreach($contentArr["questions"] as $k => $v) {
$contentArr["questions"][$k]["gt_translate_keys"] = ["text"];
if(!empty($contentArr["questions"][$k]["answers"])) {
array_walk($contentArr["questions"][$k]["answers"], function(&$item, $key) {
$item["gt_translate_keys"] = ["text", "personality"];
});
}
}
}
}
public function addKeysForEssay(&$contentArr) {
$contentArr["gt_translate_keys"] = ["checkAnswer", "feedbackHeader", "messageSave", "notEnoughChars", "remainingChars", "showSolution", "solutionTitle", "tryAgain", ["key" => "taskDescription", "format" => "html"]];
if( !empty($contentArr["solution"]) ) {
$contentArr["solution"]["gt_translate_keys"] = ["introduction", "sample"];
}
if( !empty($contentArr["overallFeedback"]) ) {
array_walk($contentArr["overallFeedback"], function(&$item, $key) {
$item["gt_translate_keys"] = ["feedback"];
});
}
if( !empty($contentArr["keywords"]) ) {
array_walk($contentArr["keywords"], function(&$item, $key) {
$item["gt_translate_keys"] = ["keyword"];
if(isset($item["alternatives"])) $item["gt_translate_keys"][] = ["key" => "alternatives", "format" => "list"];
if(isset($item["options"])) $item["options"]["gt_translate_keys"] = ["feedbackMissed"];
});
}
}
public function addKeysForImagePair(&$contentArr) {
$contentArr["gt_translate_keys"] = ["taskDescription"];
if( !empty($contentArr["cards"]) ) {
array_walk($contentArr["cards"], function(&$item, $key) {
$item["gt_translate_keys"] = ["imageAlt", "matchAlt"];
});
}
}
public function addKeysForDocumentationTool(&$contentArr) {
if( isset($contentArr["i10n"]) ) {
$contentArr["i10n"]["gt_translate_keys"] = array_keys( $contentArr["i10n"] );
}
$contentArr["gt_translate_keys"] = ["taskDescription"];
if( !empty($contentArr["pagesList"]) ) {
array_walk($contentArr["pagesList"], function(&$item, $key) {
$this->addKeysForElementsBasedOnElement( $item );
});
}
}
public function addKeysForDialogcards(&$contentArr) {
$contentArr["gt_translate_keys"] = ["answer", "audioNotSupported", "cardBackLabel", "cardFrontLabel", "next", "prev", "progressText", "retry", "tipButtonLabel", ["key" => "title", "format" => "html"], ["key" => "description", "format" => "html"]];
if( !empty($contentArr["dialogs"]) ) {
array_walk($contentArr["dialogs"], function(&$item, $key) {
$item["gt_translate_keys"] = [["key" => "answer", "format" => "html"], ["key" => "text", "format" => "html"]];
});
}
}
public function addKeysForMemoryGame(&$contentArr) {
if( !empty($contentArr["cards"]) ) {
//array_walk($contentArr["cards"], function(&$item, $key) { $item["gt_translate_keys"] = ["imageAlt"]; });
}
}
public function addKeysForTimeline(&$contentArr) {
$contentArr["timeline"]["gt_translate_keys"] = ["headline", ["key" => "text", "format" => "html"]];
if( !empty($contentArr["timeline"]["era"]) ) {
array_walk($contentArr["timeline"]["era"], function(&$item, $key) {
$item["gt_translate_keys"] = ["headline"];
});
}
if( !empty($contentArr["timeline"]["date"]) ) {
array_walk($contentArr["timeline"]["date"], function(&$item, $key) {
$item["gt_translate_keys"] = ["headline", ["key" => "text", "format" => "html"]];
});
}
}
// utility function for string within string
private function addKeysForElementsBasedOnElement( &$elem ) {
if(empty($elem) || empty($elem['library'])) return;
switch($elem['library']) {
case "H5P.Link 1.3":
$elem['params']["gt_translate_keys"] = ["title"];
break;
case "H5P.Summary 1.9":
$elem['params']["gt_translate_keys"] = ["labelCorrect", "labelCorrectAnswers", "labelIncorrect", "progressText", "resultLabel", "scoreBarLabel", "scoreLabel", "solvedLabel", ["key" => "intro", "format" => "html"]];
array_walk($elem['params']['summaries'], function(&$item, $key) {
$item["gt_translate_keys"] = [["key" => "summary", "format" => "html-list"]];
});
break;
case "H5P.GoToQuestion 1.3":
$elem['params']["gt_translate_keys"] = ["continueButtonLabel", "text"];
array_walk($elem['params']['choices'], function(&$item, $key) {
$item["gt_translate_keys"] = ["text"];
});
break;
case "H5P.AdvancedText 1.1":
$elem['params']["gt_translate_keys"] = [["key" => "text", "format" => "html"]];
break;
case "H5P.Blanks 1.10":
$elem['params']["gt_translate_keys"] = ["answerIsCorrect", "answerIsWrong", "answeredCorrectly", "answeredIncorrectly", "checkAnswer", "inputHasTipLabel", "notFilledOut", "inputLabel", "showSolutions", "solutionLabel", "tipLabel", "tryAgain", ["key" => "questions", "format" => "html-list"], ["key" => "text", "format" => "html"]];
if(!empty($elem['params']["confirmCheck"])) {
$elem['params']["confirmCheck"]["gt_translate_keys"] = array_keys( $elem['params']["confirmCheck"] );
}
if(!empty($elem['params']["confirmRetry"])) {
$elem['params']["confirmRetry"]["gt_translate_keys"] = array_keys( $elem['params']["confirmRetry"] );
}
if(!empty($elem['params']["questions"])) {
array_walk($elem['params']["questions"], function(&$item, $key){
$item = preg_replace('/(\*.[^\*]*\*)/', '$1', $item );
});
}
break;
case "H5P.MultiChoice 1.12":
if( !empty($elem['params']["UI"]) ) {
$elem['params']["UI"]["gt_translate_keys"] = array_keys( $elem['params']["UI"] );
}
if( !empty($elem['params']["confirmCheck"]) ) {
$elem['params']["confirmCheck"]["gt_translate_keys"] = array_keys( $elem['params']["confirmCheck"] );
}
if( !empty($elem['params']["confirmRetry"]) ) {
$elem['params']["confirmRetry"]["gt_translate_keys"] = array_keys( $elem['params']["confirmRetry"] );
}
if( !empty($elem['params']["answers"]) ) {
array_walk($elem['params']["answers"], function(&$item, $key) {
$item["gt_translate_keys"] = [["key" => "text", "format" => "html"]];
});
}
$elem['params']["gt_translate_keys"] = [["key" => "question", "format" => "html"]];
break;
case "H5P.Image 1.0":
break;
case "H5P.StandardPage 1.3":
$elem['params']["gt_translate_keys"] = ["helpText", "helpTextLabel", "title"];
if( !empty($elem['params']["elementList"]) ) {
array_walk($elem['params']["elementList"], function(&$subitem, $key) {
$this->addKeysForElementsBasedOnElement( $subitem );
});
}
break;
case "H5P.Text 1.1":
$elem['params']["gt_translate_keys"] = [["key" => "text", "format" => "html"]];
break;
case "H5P.TextInputField 1.1":
$elem['params']["gt_translate_keys"] = ["remainingChars", ["key" => "taskDescription", "format" => "html"]];
break;
case "H5P.GoalsPage 1.4":
$elem['params']["gt_translate_keys"] = ["defineGoalPlaceholder", "defineGoalText", "definedGoalLabel", "goalsAddedText", "helpText", "helpTextLabel", "title", "removeGoalText", "specifyGoalText", ["key" => "description", "format" => "html"]];
if(!empty($elem['params']['goalDeletionConfirmation'])) {
$elem['params']['goalDeletionConfirmation']["gt_translate_keys"] = array_keys( $elem['params']['goalDeletionConfirmation'] );
}
break;
case "H5P.GoalsAssessmentPage 1.3":
$elem['params']["gt_translate_keys"] = ["noGoalsText", "helpText", "helpTextLabel", "title", "highRating", "lowRating", "midRating", ["key" => "description", "format" => "html"]];
break;
case "H5P.DocumentExportPage 1.3":
$elem['params']["gt_translate_keys"] = ["createDocumentLabel", "exportTextLabel", "helpText", "helpTextLabel", "title", "requiresInputErrorMessage", "selectAllTextLabel", "submitSuccessTextLabel", "submitTextLabel", ["key" => "description", "format" => "html"]];
break;
default:
break;
}
}
private function addKeysFor_l10n(&$contentArr){
if(isset($contentArr["l10n"])) {
$contentArr["l10n"]["gt_translate_keys"] = array_keys( $contentArr["l10n"] );
}
}
}