diff --git a/.env.example b/.env.example
index 18f7016bc..db4716005 100644
--- a/.env.example
+++ b/.env.example
@@ -152,6 +152,11 @@ MSTEAMS_TENANT_ID=
MSTEAMS_OAUTH_URL=
MSTEAMS_LANDING_URL=
MSTEAMS_REDIRECT_URL=
+ASSIGNMENT_DUE_DATE_DAYS=
#true for only vivensity
GCR_ENV_PERMISSION_VIV=true
+
+#Smithsonian Open Access API
+SMITHSONIAN_API_BASE_URL=
+SMITHSONIAN_API_KEY=
\ No newline at end of file
diff --git a/H5P/laravel-h5p/src/LaravelH5p/Http/Controllers/AjaxController.php b/H5P/laravel-h5p/src/LaravelH5p/Http/Controllers/AjaxController.php
index 2abae710f..8c8a63b5d 100644
--- a/H5P/laravel-h5p/src/LaravelH5p/Http/Controllers/AjaxController.php
+++ b/H5P/laravel-h5p/src/LaravelH5p/Http/Controllers/AjaxController.php
@@ -363,7 +363,6 @@ private function findLibraryDependencies($machineName, $library, $core, $paramet
}
}
-
// Order dependencies by weight
$orderedDependencies = array();
for ($i = 1, $s = count($dependencies); $i <= $s; $i++) {
diff --git a/app/CurrikiGo/Canvas/Commands/CreateAssignmentCommand.php b/app/CurrikiGo/Canvas/Commands/CreateAssignmentCommand.php
new file mode 100644
index 000000000..eca1582c6
--- /dev/null
+++ b/app/CurrikiGo/Canvas/Commands/CreateAssignmentCommand.php
@@ -0,0 +1,114 @@
+courseId = $courseId;
+ $this->assignmentGroupId = $assignmentGroupId;
+ $this->assignmentName = $assignmentName;
+ $this->currikiActivityId = $currikiActivityId;
+ $this->endpoint = config('constants.canvas_api_endpoints.create_assignment');
+ $this->courseData = $this->prepareCourseData($assignmentGroupId, $assignmentName, $this->currikiActivityId);
+ }
+
+ /**
+ * Execute an API request for fetching course details
+ *
+ * @return string|null
+ */
+ public function execute()
+ {
+ $assignment = $this->courseData;
+ $response = null;
+ try {
+ $response = $this->httpClient->request('POST', $this->apiURL . '/courses/' . $this->courseId . '/' . $this->endpoint, [
+ 'headers' => ['Authorization' => "Bearer {$this->accessToken}"],
+ 'json' => ['assignment' => $assignment]
+ ])->getBody()->getContents();
+ $response = json_decode($response);
+ } catch (Exception $ex) {
+ }
+
+ return $response;
+ }
+
+ /**
+ * Prepare course data for API payload
+ *
+ * @param array $data
+ * @return array
+ */
+ public function prepareCourseData($assignmentGroupId, $assignmentGroupName, $currikiActivityId)
+ {
+ $assignment = [];
+ $assignment["name"] = $assignmentGroupName;
+ $assignment['assignment_group_id'] = $assignmentGroupId;
+ $assignment['self_signup'] = 'enabled';
+ $assignment['position'] = 1;
+ $assignment['submission_types'][] = 'external_tool';
+ $assignment['return_type'] = 'lti_launch_url';
+ $assignment['workflow_state'] = 'published';
+ $assignment['points_possible'] = 100;
+ $assignment['published'] = true;
+ $assignment['external_tool_tag_attributes']['url'] = config('constants.curriki-tsugi-host') . "?activity=" . $currikiActivityId;
+ return $assignment;
+ }
+}
diff --git a/app/CurrikiGo/Canvas/Commands/CreateAssignmentGroupsCommand.php b/app/CurrikiGo/Canvas/Commands/CreateAssignmentGroupsCommand.php
new file mode 100644
index 000000000..69d67396e
--- /dev/null
+++ b/app/CurrikiGo/Canvas/Commands/CreateAssignmentGroupsCommand.php
@@ -0,0 +1,87 @@
+courseId = $courseId;
+ $this->endpoint = config('constants.canvas_api_endpoints.assignment_groups');
+ $this->courseData = $this->prepareCourseData($assignmentGroupName);
+ }
+
+ /**
+ * Execute an API request for fetching course details
+ *
+ * @return string|null
+ */
+ public function execute()
+ {
+ $response = null;
+ try {
+ $response = $this->httpClient->request('POST', $this->apiURL . '/courses/' . $this->courseId . '/' . $this->endpoint, [
+ 'headers' => ['Authorization' => "Bearer {$this->accessToken}"],
+ 'json' => $this->courseData
+ ])->getBody()->getContents();
+ $response = json_decode($response);
+ } catch (Exception $ex) {
+ }
+
+ return $response;
+ }
+
+ /**
+ * Prepare course data for API payload
+ *
+ * @param array $data
+ * @return array
+ */
+ public function prepareCourseData($assignmentGroupName)
+ {
+ return ["name" => $assignmentGroupName];
+ }
+}
diff --git a/app/CurrikiGo/Canvas/Commands/CreateCourseCommand.php b/app/CurrikiGo/Canvas/Commands/CreateCourseCommand.php
index 77646184a..d6ffe17bf 100644
--- a/app/CurrikiGo/Canvas/Commands/CreateCourseCommand.php
+++ b/app/CurrikiGo/Canvas/Commands/CreateCourseCommand.php
@@ -48,10 +48,10 @@ class CreateCourseCommand implements Command
* @param array $sisId
* @return void
*/
- public function __construct($accountId, $courseData, $sisId)
+ public function __construct($courseName, $accountId)
{
$this->accountId = $accountId;
- $this->courseData = $this->prepareCourseData($courseData, $sisId);
+ $this->courseData = $this->prepareCourseData($courseName);
}
/**
@@ -62,14 +62,16 @@ public function __construct($accountId, $courseData, $sisId)
public function execute()
{
$response = null;
- try {
+ try {
$response = $this->httpClient->request('POST', $this->apiURL . '/accounts/' . $this->accountId . '/courses', [
- 'headers' => ['Authorization' => "Bearer {$this->accessToken}", 'Accept' => 'application/json'],
- 'json' => $this->courseData
- ])->getBody()->getContents();
+ 'headers' => ['Authorization' => "Bearer {$this->accessToken}", 'Accept' => 'application/json'],
+ 'json' => $this->courseData
+ ])->getBody()->getContents();
$response = json_decode($response);
- } catch (Exception $ex) {}
-
+ }
+ catch (Exception $ex) {
+ }
+
return $response;
}
@@ -79,12 +81,11 @@ public function execute()
* @param array $data
* @return array
*/
- public function prepareCourseData($data, $sisId)
+ public function prepareCourseData($courseName)
{
- $course["name"] = $data['name'];
- $short_name = strtolower(implode('-', explode(' ', $data['name'])));
+ $course["name"] = $courseName;
+ $short_name = strtolower(implode('-', explode(' ', $courseName)));
$course["course_code"] = $short_name;
- $course["sis_course_id"] = $sisId;
$course["license"] = "public_domain";
$course["public_syllabus_to_auth"] = true;
$course["public_description"] = $course["name"] . " by CurrikiStudio";
diff --git a/app/CurrikiGo/Canvas/Commands/GetAllCoursesCommand.php b/app/CurrikiGo/Canvas/Commands/GetAllCoursesCommand.php
new file mode 100644
index 000000000..833c8ad1a
--- /dev/null
+++ b/app/CurrikiGo/Canvas/Commands/GetAllCoursesCommand.php
@@ -0,0 +1,61 @@
+apiURL . '/courses' . '?per_page=1000';
+ $response = $this->httpClient->request('GET', $url, [
+ 'headers' => ['Authorization' => "Bearer {$this->accessToken}", 'Accept' => 'application/json']
+ ])->getBody()->getContents();
+ $response = json_decode($response);
+ } catch (Exception $ex) {
+ }
+
+ return $response;
+ }
+}
diff --git a/app/CurrikiGo/Canvas/Commands/GetAssignmentGroupsCommand.php b/app/CurrikiGo/Canvas/Commands/GetAssignmentGroupsCommand.php
new file mode 100644
index 000000000..412a78c0e
--- /dev/null
+++ b/app/CurrikiGo/Canvas/Commands/GetAssignmentGroupsCommand.php
@@ -0,0 +1,74 @@
+courseId = $courseId;
+ $this->endpoint = config('constants.canvas_api_endpoints.assignment_groups');
+ }
+
+ /**
+ * Execute an API request for fetching course details
+ *
+ * @return string|null
+ */
+ public function execute()
+ {
+ $response = null;
+ try {
+ $response = $this->httpClient->request('GET', $this->apiURL . '/courses/' . $this->courseId . '/' . $this->endpoint . '?per_page=1000', [
+ 'headers' => ['Authorization' => "Bearer {$this->accessToken}"]
+ ])->getBody()->getContents();
+ $response = json_decode($response);
+ } catch (Exception $ex) {
+ }
+
+ return $response;
+ }
+}
diff --git a/app/CurrikiGo/Canvas/Commands/GetAssignmntCommand.php b/app/CurrikiGo/Canvas/Commands/GetAssignmntCommand.php
new file mode 100644
index 000000000..6a611f10d
--- /dev/null
+++ b/app/CurrikiGo/Canvas/Commands/GetAssignmntCommand.php
@@ -0,0 +1,73 @@
+courseId = $courseId;
+ $this->queryString = $queryString;
+ }
+
+ /**
+ * Execute an API request for fetching course details
+ *
+ * @return string|null
+ */
+ public function execute()
+ {
+ $response = null;
+ try {
+ $response = $this->httpClient->request('GET', $this->apiURL . '/courses/' . $this->courseId . $this->queryString, [
+ 'headers' => ['Authorization' => "Bearer {$this->accessToken}"]
+ ])->getBody()->getContents();
+ $response = json_decode($response);
+ } catch (Exception $ex) {}
+
+ return $response;
+ }
+}
diff --git a/app/CurrikiGo/Canvas/Course.php b/app/CurrikiGo/Canvas/Course.php
index 8286056f8..178fd51b5 100644
--- a/app/CurrikiGo/Canvas/Course.php
+++ b/app/CurrikiGo/Canvas/Course.php
@@ -3,13 +3,20 @@
namespace App\CurrikiGo\Canvas;
use App\CurrikiGo\Canvas\Client;
+use App\CurrikiGo\Canvas\Commands\CreateAssignmentCommand;
+use App\CurrikiGo\Canvas\Commands\CreateAssignmentGroupsCommand;
+use App\CurrikiGo\Canvas\Commands\CreateCourseCommand;
+use App\CurrikiGo\Canvas\Commands\GetAllCoursesCommand;
use App\CurrikiGo\Canvas\Commands\GetCoursesCommand;
use App\CurrikiGo\Canvas\Commands\GetModulesCommand;
+use App\CurrikiGo\Canvas\Commands\GetAssignmentGroupsCommand;
use App\CurrikiGo\Canvas\Commands\GetModuleItemsCommand;
use App\CurrikiGo\Canvas\Helpers\Course as CourseHelper;
use App\Models\Project;
use Illuminate\Support\Facades\Auth;
+use function Doctrine\Common\Cache\Psr6\get;
+
/**
* Class for fetching courses from Canvas LMS
*/
@@ -53,6 +60,7 @@ public function fetch(Project $project)
$moduleItems = [];
if ($course) {
+ $assignmentGroups = $this->canvasClient->run(new GetAssignmentGroupsCommand($course->id));
$modules = $this->canvasClient->run(new GetModulesCommand($course->id, $moduleName));
$module = CourseHelper::getModuleByName($modules, $moduleName);
if ($module) {
@@ -61,9 +69,87 @@ public function fetch(Project $project)
$moduleItems[] = $item->title;
}
}
- return ['course' => $course->name, 'playlists' => $moduleItems];
+ return [
+ 'course' => $course->name,
+ 'playlists' => $moduleItems,
+ 'assignment_groups' => $assignmentGroups
+ ];
}
- return ['course' => null, 'playlists' => []];
+ return ['course' => null, 'playlists' => [], 'assignment_groups' => []];
+ }
+
+ /**
+ * Fetch all courses from Canvas LMS
+ *
+ * @return array
+ */
+ public function fetchAllCourses()
+ {
+ $moduleItems = [];
+ $courses = $this->canvasClient->run(new GetAllCoursesCommand());
+ if ($courses) {
+ foreach ($courses as $key => $item) {
+ $moduleItems[$key]['id'] = $item->id;
+ $moduleItems[$key]['name'] = $item->name;
+ }
+ }
+ return $moduleItems;
+ }
+
+ /**
+ * Fetch assignmet groups from Canvas LMS
+ *
+ * @param $courseId
+ * @return array
+ */
+ public function fetchAssignmentGroups($courseId)
+ {
+ $assignmentGroups = $this->canvasClient->run(new GetAssignmentGroupsCommand($courseId));
+ $moduleItems = [];
+ if ($assignmentGroups) {
+ foreach ($assignmentGroups as $key => $item) {
+ $moduleItems[$key]['id'] = $item->id;
+ $moduleItems[$key]['name'] = $item->name;
+ }
+ }
+ return $moduleItems;
+ }
+
+ /**
+ * Create assignmet groups in Canvas LMS course
+ *
+ * @param $courseId
+ * @param $assignmentGroupName
+ * @return array
+ */
+ public function CreateAssignmentGroups($courseId, $assignmentGroupName)
+ {
+ return $this->canvasClient->run(new CreateAssignmentGroupsCommand($courseId, $assignmentGroupName));
+ }
+
+ /**
+ * Create new course groups in Canvas LMS course
+ *
+ * @param $courseName
+ * @return string
+ */
+ public function createNewCourse($courseName)
+ {
+ return $this->canvasClient->run(new CreateCourseCommand($courseName, $accountId = 'self'));
+ }
+
+ /**
+ * Create assignmet in Canvas LMS course
+ *
+ * @param $courseId
+ * @param $AssignmentGroupId
+ * @param $AssignmentName
+ * @param $currikiActivityId
+ * @return array
+ */
+ public function createActivity($courseId, $AssignmentGroupId, $AssignmentName, $currikiActivityId)
+ {
+ return $this->canvasClient->run(new CreateAssignmentCommand($courseId, $AssignmentGroupId, $AssignmentName, $currikiActivityId));
}
}
diff --git a/app/CurrikiGo/Canvas/Playlist.php b/app/CurrikiGo/Canvas/Playlist.php
index 464add6d1..38d97ba5d 100644
--- a/app/CurrikiGo/Canvas/Playlist.php
+++ b/app/CurrikiGo/Canvas/Playlist.php
@@ -3,6 +3,8 @@
namespace App\CurrikiGo\Canvas;
use App\CurrikiGo\Canvas\Client;
+use App\CurrikiGo\Canvas\Commands\CreateAssignmentCommand;
+use App\CurrikiGo\Canvas\Commands\CreateAssignmentGroupsCommand;
use App\CurrikiGo\Canvas\Commands\GetUsersCommand;
use App\CurrikiGo\Canvas\Commands\GetEnrollmentsCommand;
use App\CurrikiGo\Canvas\Commands\GetCoursesCommand;
@@ -12,10 +14,13 @@
use App\CurrikiGo\Canvas\Commands\CreateModuleItemCommand;
use App\CurrikiGo\Canvas\Commands\GetCourseEnrollmentCommand;
use App\CurrikiGo\Canvas\Commands\CreateCourseEnrollmentCommand;
+use App\CurrikiGo\Canvas\Commands\GetAssignmentGroupsCommand;
use App\CurrikiGo\Canvas\Helpers\Course as CourseHelper;
use App\CurrikiGo\Canvas\Helpers\Enrollment as EnrollmentHelper;
use App\Models\Playlist as PlaylistModel;
+use App\CurrikiGo\Canvas\Course as CanvasCourse;
use App\Http\Resources\V1\CurrikiGo\CanvasPlaylistResource;
+use Exception;
use Illuminate\Support\Facades\Auth;
/**
@@ -47,68 +52,56 @@ public function __construct(Client $client)
* @param array $data
* @return array
*/
- public function send(PlaylistModel $playlist, $data)
+ public function send(PlaylistModel $playlist, $data, $createAssignment, $canvasCourseId)
{
- $user = Auth::user();
- $projectNameSlug = CourseHelper::urlTitle($playlist->project->name);
- $sisId = $projectNameSlug . '-' . $user->id . '-' . $playlist->project->id;
-
- $lmsSettings = $this->canvasClient->getLmsSettings();
- $playlistItem = null;
- $moduleName = Client::CURRIKI_MODULE_NAME;
- $accountId = "self";
+ try {
+ $user = Auth::user();
+ $projectNameSlug = CourseHelper::urlTitle($playlist->project->name);
+ $sisId = $projectNameSlug . '-' . $user->id . '-' . $playlist->project->id;
- $courses = $this->canvasClient->run(new GetCoursesCommand($accountId, $playlist->project->name, $sisId));
- $course = CourseHelper::getBySisId($courses, $sisId);
-
- if ($course) {
- // enroll user to existing course as teacher if not enrolled
- $enrollments = $this->canvasClient->run(new GetCourseEnrollmentCommand($course->id, '?type[]=TeacherEnrollment'));
- if ($lmsSettings->lms_login_id && !EnrollmentHelper::isEnrolled($lmsSettings->lms_login_id, $enrollments)) {
- $users = $this->canvasClient->run(new GetUsersCommand($accountId, '?search_term=' . $lmsSettings->lms_login_id));
- $userIndex = array_search($lmsSettings->lms_login_id, array_column($users, 'login_id'));
- $user = $userIndex !== false ? $users[$userIndex] : null;
- if ($user) {
- $enrollmentData = ['enrollment' => ['user_id' => $user->id, 'type' => 'TeacherEnrollment', 'enrollment_state' => 'active', 'notify' => true]];
- $this->canvasClient->run(new CreateCourseEnrollmentCommand($course->id, $enrollmentData));
+ $lmsSettings = $this->canvasClient->getLmsSettings();
+ $playlistItem = null;
+ $moduleName = Client::CURRIKI_MODULE_NAME;
+ $accountId = "self";
+
+ if ($createAssignment == config('constants.canvas_creation_type.create_modules')) {
+ $modules = $this->canvasClient->run(new GetModulesCommand($canvasCourseId, $moduleName));
+ $module = CourseHelper::getModuleByName($modules, $moduleName);
+ if (!$module) {
+ $module = $this->canvasClient->run(new CreateModuleCommand($canvasCourseId, ["name" => $moduleName]));
}
- }
+ $moduleItem['title'] = $playlist->title . ($data['counter'] > 0 ? ' (' . $data['counter'] . ')' : '');
+ $moduleItem['content_id'] = $playlist->id;
+ $moduleItem['external_url'] = config('constants.curriki-tsugi-host') . "?playlist=" . $playlist->id;
+ $playlistItem = $this->canvasClient->run(new CreateModuleItemCommand($canvasCourseId, $module->id, $moduleItem));
+ $response = 'Modules published successfully';
+ } else {
+ $activities = $playlist->activities;
+ $createAssignmentGroup = $this->canvasClient->run(new CreateAssignmentGroupsCommand($canvasCourseId, $playlist->title));
- // add playlist to existing course
- $modules = $this->canvasClient->run(new GetModulesCommand($course->id, $moduleName));
- $module = CourseHelper::getModuleByName($modules, $moduleName);
- if (!$module) {
- $module = $this->canvasClient->run(new CreateModuleCommand($course->id, ["name" => $moduleName]));
+ if ($createAssignmentGroup) {
+ foreach ($activities as $activity) {
+ $createAssignment = $this->canvasClient->run(new CreateAssignmentCommand($canvasCourseId, $createAssignmentGroup->id, $activity->title, $activity->id));
+ }
+ }
+ $response = 'Assignments published successfully';
}
- $moduleItem['title'] = $playlist->title . ($data['counter'] > 0 ? ' (' . $data['counter'] . ')' : '');
- $moduleItem['content_id'] = $playlist->id;
- $moduleItem['external_url'] = config('constants.curriki-tsugi-host') . "?playlist=" . $playlist->id;
- $playlistItem = $this->canvasClient->run(new CreateModuleItemCommand($course->id, $module->id, $moduleItem));
- } else {
- // create new course and add playlist
- $courseData = ['name' => $playlist->project->name];
- // Addig a date stamp to sis id
- $sisId .= '-' . date('YmdHis');
- $course = $this->canvasClient->run(new CreateCourseCommand($accountId, $courseData, $sisId));
- $module = $this->canvasClient->run(new CreateModuleCommand($course->id, ["name" => $moduleName]));
- $moduleItem['title'] = $playlist->title . ($data['counter'] > 0 ? ' (' . $data['counter'] . ')' : '');
- $moduleItem['content_id'] = $playlist->id;
- $moduleItem['external_url'] = config('constants.curriki-tsugi-host') . "?playlist=" . $playlist->id;
- $playlistItem = $this->canvasClient->run(new CreateModuleItemCommand($course->id, $module->id, $moduleItem));
// enroll user to course as teacher
- $enrollments = $this->canvasClient->run(new GetCourseEnrollmentCommand($course->id, '?type[]=TeacherEnrollment'));
+ $enrollments = $this->canvasClient->run(new GetCourseEnrollmentCommand($canvasCourseId, '?type[]=TeacherEnrollment'));
if ($lmsSettings->lms_login_id && !EnrollmentHelper::isEnrolled($lmsSettings->lms_login_id, $enrollments)) {
$users = $this->canvasClient->run(new GetUsersCommand($accountId, '?search_term=' . $lmsSettings->lms_login_id));
$userIndex = array_search($lmsSettings->lms_login_id, array_column($users, 'login_id'));
$user = $userIndex !== false ? $users[$userIndex] : null;
if ($user) {
$enrollmentData = ['enrollment' => ['user_id' => $user->id, 'type' => 'TeacherEnrollment', 'enrollment_state' => 'active', 'notify' => true]];
- $this->canvasClient->run(new CreateCourseEnrollmentCommand($course->id, $enrollmentData));
+ $this->canvasClient->run(new CreateCourseEnrollmentCommand($canvasCourseId, $enrollmentData));
}
}
+
+ return $response;
+ } catch (Exception $e) {
+ return false;
}
-
- return CanvasPlaylistResource::make($playlistItem)->resolve();
}
}
diff --git a/app/CurrikiGo/Smithsonian/Client.php b/app/CurrikiGo/Smithsonian/Client.php
new file mode 100644
index 000000000..0ae33f667
--- /dev/null
+++ b/app/CurrikiGo/Smithsonian/Client.php
@@ -0,0 +1,29 @@
+execute();
+ }
+}
diff --git a/app/CurrikiGo/Smithsonian/Commands/Contents/GetContentDetailCommand.php b/app/CurrikiGo/Smithsonian/Commands/Contents/GetContentDetailCommand.php
new file mode 100644
index 000000000..bb7acf7fc
--- /dev/null
+++ b/app/CurrikiGo/Smithsonian/Commands/Contents/GetContentDetailCommand.php
@@ -0,0 +1,40 @@
+getParam = $getParam;
+ }
+
+ /**
+ * Execute an API request to return Smithsonian content detail
+ * @return json object $response
+ */
+ public function execute()
+ {
+ $apiUrl = config('smithsonian.api_base_url') . '/content/'.$this->getParam['id'].'?api_key='.config('smithsonian.api_key');
+ $response = Http::get($apiUrl);
+ return $response->json();
+ }
+}
diff --git a/app/CurrikiGo/Smithsonian/Commands/Contents/GetContentListCommand.php b/app/CurrikiGo/Smithsonian/Commands/Contents/GetContentListCommand.php
new file mode 100644
index 000000000..37e266cf0
--- /dev/null
+++ b/app/CurrikiGo/Smithsonian/Commands/Contents/GetContentListCommand.php
@@ -0,0 +1,41 @@
+getParam = $getParam;
+ }
+
+ /**
+ * Execute an API request to return Smithsonian content list
+ * @return json object $response
+ */
+ public function execute()
+ {
+ $apiUrl = config('smithsonian.api_base_url') . '/search?api_key='.config('smithsonian.api_key').'&' . http_build_query($this->getParam);
+ $response = Http::get($apiUrl);
+ return $response->json();
+ }
+}
diff --git a/app/CurrikiGo/Smithsonian/Contents/GetContentDetail.php b/app/CurrikiGo/Smithsonian/Contents/GetContentDetail.php
new file mode 100644
index 000000000..f54704240
--- /dev/null
+++ b/app/CurrikiGo/Smithsonian/Contents/GetContentDetail.php
@@ -0,0 +1,47 @@
+smithsonianClient = $client;
+ }
+
+ /**
+ * Fetch Smithsonian content detail
+ * @param array $getParam
+ * @return json object $response
+ * @throws GeneralException
+ */
+ public function fetch($getParam)
+ {
+ $response = $this->smithsonianClient->run(new GetContentDetailCommand($getParam));
+ if ( $response ) {
+ return $response;
+ } else {
+ throw new GeneralException('No Record Found!');
+ }
+ }
+
+}
diff --git a/app/CurrikiGo/Smithsonian/Contents/GetContentList.php b/app/CurrikiGo/Smithsonian/Contents/GetContentList.php
new file mode 100644
index 000000000..a04eda949
--- /dev/null
+++ b/app/CurrikiGo/Smithsonian/Contents/GetContentList.php
@@ -0,0 +1,47 @@
+smithsonianClient = $client;
+ }
+
+ /**
+ * Fetch Smithsonian contents list
+ * @param array $getParam
+ * @return json object $response
+ * @throws GeneralException
+ */
+ public function fetch($getParam)
+ {
+ $response = $this->smithsonianClient->run(new GetContentListCommand($getParam));
+ if ( $response ) {
+ return $response;
+ } else {
+ throw new GeneralException('No Record Found!');
+ }
+ }
+
+}
diff --git a/app/CurrikiGo/Smithsonian/Contracts/Command.php b/app/CurrikiGo/Smithsonian/Contracts/Command.php
new file mode 100644
index 000000000..5038cd5dc
--- /dev/null
+++ b/app/CurrikiGo/Smithsonian/Contracts/Command.php
@@ -0,0 +1,14 @@
+lmsSettingRepository->find($fetchRequest['setting_id']);
+ $canvasClient = new Client($lmsSettings);
+ $canvasCourse = new CanvasCourse($canvasClient);
+ $outcome = $canvasCourse->fetchAllCourses();
+
+ if ($outcome) {
+ return response([
+ 'response_code' => 200,
+ 'response_message' => 'Fetched all the courses',
+ 'data' => $outcome,
+ ], 200);
+ } else {
+ return response([
+ 'response_code' => 200,
+ 'response_message' => 'No Courses found',
+ 'data' => $outcome,
+ ], 200);
+ }
+ }
+
+ /**
+ * Fetch all Assignment groups of selected course from Canvas
+ *
+ * @bodyParam course_id int The Id of selected course
+ *
+ * @responseFile responses/curriki-go/fetch-assignment-groups.json
+ *
+ * @response 400 {
+ * "errors": [
+ * "Validation error"
+ * ]
+ * }
+ *
+ * @response 403 {
+ * "errors": [
+ * "You are not authorized to perform this action."
+ * ]
+ * }
+ *
+ * @param $courseId
+ * @param FetchCourseRequest $request
+ * @return Response $request
+ */
+ public function fetchAssignmentGroups($courseId, FetchCourseRequest $request)
+ {
+ $lmsSettings = $this->lmsSettingRepository->find($request['setting_id']);
+ $canvasClient = new Client($lmsSettings);
+ $canvasCourse = new CanvasCourse($canvasClient);
+ $outcome = $canvasCourse->fetchAssignmentGroups($courseId);
+
+ if ($outcome) {
+ return response([
+ 'response_code' => 200,
+ 'response_message' => 'Fetched all assignment groups',
+ 'data' => $outcome,
+ ], 200);
+ } else {
+ return response([
+ 'response_code' => 200,
+ 'response_message' => 'No Assignments found',
+ 'data' => $outcome,
+ ], 200);
+ }
+ }
+
+ /**
+ * Create Assignment groups of selected course from Canvas
+ *
+ * @bodyParam assignment_group's name string
+ *
+ * @responseFile responses/curriki-go/create-assignment-groups.json
+ *
+ * @response 400 {
+ * "errors": [
+ * "Validation error"
+ * ]
+ * }
+ *
+ * @response 403 {
+ * "errors": [
+ * "You are not authorized to perform this action."
+ * ]
+ * }
+ *
+ * @param $courseId
+ * @param CreateAssignmentGroupRequest $courseId
+ * @return Response $request
+ */
+ public function createAssignmentGroups($courseId, CreateAssignmentGroupRequest $request)
+ {
+ $lmsSettings = $this->lmsSettingRepository->find($request['setting_id']);
+ $canvasClient = new Client($lmsSettings);
+ $canvasCourse = new CanvasCourse($canvasClient);
+ $outcome = $canvasCourse->CreateAssignmentGroups($courseId, $request['assignment_group_name']);
+
+ if ($outcome) {
+ return response([
+ 'response_code' => 200,
+ 'response_message' => 'New assignment group has been created successfully!',
+ 'data' => $outcome,
+ ], 200);
+ } else {
+ return response([
+ 'response_code' => 200,
+ 'response_message' => 'No Assignment Groups found',
+ 'data' => $outcome,
+ ], 200);
+ }
+ }
+
+ /**
+ * Create new course in Canvas
+ *
+ * @bodyParam course name string
+ *
+ * @responseFile responses/curriki-go/create-course-groups.json
+ *
+ * @response 400 {
+ * "errors": [
+ * "Validation error"
+ * ]
+ * }
+ *
+ * @response 403 {
+ * "errors": [
+ * "You are not authorized to perform this action."
+ * ]
+ * }
+ *
+ * @return Response $request
+ */
+ public function createNewCourse(CreateCourseRequest $request)
+ {
+ $lmsSettings = $this->lmsSettingRepository->find($request->setting_id);
+ $canvasClient = new Client($lmsSettings);
+ $canvasCourse = new CanvasCourse($canvasClient);
+ $outcome = $canvasCourse->createNewCourse($request->course_name);
+
+ if ($outcome) {
+ return response([
+ 'response_code' => 200,
+ 'response_message' => 'New course has been created successfully!',
+ 'data' => $outcome,
+ ], 200);
+ } else {
+ return response([
+ 'response_code' => 500,
+ 'response_message' => 'course creation failed',
+ 'data' => $outcome,
+ ], 200);
+ }
+ }
+
/**
* Fetch a Course from Moodle
*
diff --git a/app/Http/Controllers/Api/V1/CurrikiGo/PublishController.php b/app/Http/Controllers/Api/V1/CurrikiGo/PublishController.php
index 21bfc490e..5fe309c3f 100644
--- a/app/Http/Controllers/Api/V1/CurrikiGo/PublishController.php
+++ b/app/Http/Controllers/Api/V1/CurrikiGo/PublishController.php
@@ -22,6 +22,9 @@
use App\Services\CurrikiGo\LMSIntegrationServiceInterface;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
+use App\CurrikiGo\Canvas\Course as CanvasCourse;
+use App\Http\Requests\V1\CurrikiGo\CreateAssignmentRequest;
+use App\Http\Requests\V1\CurrikiGo\PublishMoodlePlaylistRequest;
use Illuminate\Support\Facades\Gate;
/**
@@ -75,13 +78,13 @@ public function __construct(LmsSettingRepositoryInterface $lmsSettingRepository,
* ]
* }
*
- * @param PublishPlaylistRequest $publishRequest
+ * @param PublishMoodlePlaylistRequest $publishRequest
* @param Project $project
* @param Playlist $playlist
* @return Response
*/
// TODO: need to add 200 response
- public function playlistToMoodle(PublishPlaylistRequest $publishRequest, Project $project, Playlist $playlist)
+ public function playlistToMoodle(PublishMoodlePlaylistRequest $publishRequest, Project $project, Playlist $playlist)
{
if ($playlist->project_id !== $project->id) {
return response([
@@ -167,13 +170,19 @@ public function playlistToCanvas(Project $project, Playlist $playlist, PublishPl
$canvasClient = new Client($lmsSettings);
$canvasPlaylist = new CanvasPlaylist($canvasClient);
$counter = (isset($data['counter']) ? intval($data['counter']) : 0);
- $outcome = $canvasPlaylist->send($playlist, ['counter' => $counter]);
+ $outcome = $canvasPlaylist->send($playlist, ['counter' => $counter], $publishRequest->creation_type, $publishRequest->canvas_course_id);
if ($outcome) {
return response([
'playlist' => $outcome,
], 200);
- } else {
+ }
+ elseif ($outcome == false) {
+ return response([
+ 'errors' => ['Something went wrong while publishing.'],
+ ], 400);
+ }
+ else {
return response([
'errors' => ['Failed to send playlist to canvas.'],
], 500);
@@ -263,4 +272,66 @@ public function activityToSafariMontage(Project $project, Playlist $playlist, Ac
], 403);
}
+ /**
+ * Publish Activity to Canvas.
+ *
+ * Publish the specified playlist to Canvas.
+ *
+ * @urlParam project required The Id of the project Example: 1
+ * @urlParam playlist required The Id of the playlist Example: 1
+ * @urlParam activity required The Id of the activity Example: 1
+ * @bodyParam setting_id int The Id of the LMS setting Example: 1
+ * @bodyParam counter int The counter for uniqueness of the title Example: 1
+ *
+ * @responseFile responses/curriki-go/assignment-to-canvas.json
+ *
+ * @response 400 {
+ * "errors": [
+ * "Invalid project or activity Id."
+ * ]
+ * }
+ *
+ * @response 403 {
+ * "errors": [
+ * "You are not authorized to perform this action."
+ * ]
+ * }
+ *
+ * @response 500 {
+ * "errors": [
+ * "Failed to send activity to Canvas."
+ * ]
+ * }
+ *
+ * @param courseId
+ * @param CreateAssignmentRequest $publishRequest
+ * @return Response
+ */
+ public function activityToCanvas($courseId, CreateAssignmentRequest $publishRequest)
+ {
+ $project = Activity::find($publishRequest->curriki_activity_id)->playlist->project;
+ if (Gate::forUser(auth()->user())->allows('publish-to-lms', $project)) {
+ // User can publish
+ $lmsSettings = $this->lmsSettingRepository->find($publishRequest['setting_id']);
+ $canvasClient = new Client($lmsSettings);
+ $easyUpload = new CanvasCourse($canvasClient);
+
+ $outcome = $easyUpload->createActivity($courseId, $publishRequest->assignment_group_id, $publishRequest->assignment_name, $publishRequest->curriki_activity_id);
+
+ if ($outcome) {
+ return response([
+ 'Activity' => $outcome,
+ ], 200);
+ } else {
+ return response([
+ 'errors' => ['Failed to Publish to canvas.'],
+ ], 500);
+ }
+ }
+
+ return response([
+ 'errors' => ['You are not authorized to perform this action.'],
+ ], 403);
+ }
+
}
diff --git a/app/Http/Controllers/Api/V1/Integration/SmithsonianIOAAPIClientController.php b/app/Http/Controllers/Api/V1/Integration/SmithsonianIOAAPIClientController.php
new file mode 100644
index 000000000..55180d1bf
--- /dev/null
+++ b/app/Http/Controllers/Api/V1/Integration/SmithsonianIOAAPIClientController.php
@@ -0,0 +1,80 @@
+client = new Client();
+ }
+
+ /**
+ * Get Smithsonian Contents List
+ * @param Request $request
+ * @bodyParam q string use for search Example: q=online_visual_material:true AND IC 443
+ * @bodyParam start int like page number Example: 1
+ * @bodyParam rows int like page size or number of record per page Example: 10
+ * @bodyParam sort string Sort list by id, newest, updated and random field
+ * @bodyParam type string get list by type = edanmdm or ead_collection or ead_component or all
+ * @bodyParam row_group string The designated set of row types you are filtering it may be objects, archives
+ * @return object $response
+ * @throws GeneralException
+ */
+ public function getContentList(Request $request)
+ {
+ $getParam = $request->only([
+ 'q',
+ 'start',
+ 'rows',
+ 'sort',
+ 'type',
+ 'row_group'
+ ]);
+ $auth = \Auth::user();
+ if ( $auth && $auth->id ) {
+ $instance = new GetContentList($this->client);
+ $response = $instance->fetch($getParam);
+ return $response;
+ }
+ throw new GeneralException('Unauthorized!');
+ }
+
+ /**
+ * Get Smithsonian Content Detail
+ * @param Request $request
+ * @bodyParam id string Example: con-1620124231687-1620150333404-0
+ * @return object $response
+ * @throws GeneralException
+ */
+ public function getContentDetail(Request $request)
+ {
+ $getParam = $request->only([
+ 'id'
+ ]);
+ $auth = \Auth::user();
+ if ( $auth && $auth->id && isset($getParam['id']) && $getParam['id'] != '') {
+ $instance = new GetContentDetail($this->client);
+ $response = $instance->fetch($getParam);
+ return $response;
+ }
+ throw new GeneralException('Please check you payload data. id field is require!');
+ }
+}
diff --git a/app/Http/Controllers/Api/V1/MicroSoftTeamController.php b/app/Http/Controllers/Api/V1/MicroSoftTeamController.php
index 2fc177faa..d179af449 100644
--- a/app/Http/Controllers/Api/V1/MicroSoftTeamController.php
+++ b/app/Http/Controllers/Api/V1/MicroSoftTeamController.php
@@ -15,9 +15,11 @@
use Illuminate\Support\Facades\Http;
use App\Http\Requests\V1\MSTeamCreateClassRequest;
use App\Http\Requests\V1\MSTeamCreateAssignmentRequest;
+use App\Http\Requests\V1\MSSaveAccessTokenRequest;
use App\Models\Playlist;
use App\Models\Project;
use App\Models\Activity;
+use App\Jobs\PublishProject;
use App\User;
use Redirect;
@@ -107,6 +109,51 @@ public function getAccessToken(Request $request)
}
}
+
+ /**
+ * Save Access Token
+ *
+ * Save GraphAPI access token in the database.
+ *
+ * @bodyParam access_token string required The stringified of the GraphAPI access token JSON object
+ *
+ * @response {
+ * "message": "Access token has been saved successfully."
+ * }
+ *
+ * @response 500 {
+ * "errors": [
+ * "Validation error: Access token is required"
+ * ]
+ * }
+ *
+ * @response 500 {
+ * "errors": [
+ * "Failed to save the token."
+ * ]
+ * }
+ *
+ * @param MSSaveAccessTokenRequest $accessTokenRequest
+ * @return Response
+ */
+ public function saveAccessToken(MSSaveAccessTokenRequest $accessTokenRequest)
+ {
+ $data = $accessTokenRequest->validated();
+ $authUser = auth()->user();
+ $isUpdated = $this->userRepository->update([
+ 'msteam_access_token' => $data['access_token']
+ ], $authUser->id);
+
+ if ($isUpdated) {
+ return response([
+ 'message' => 'Access token has been saved successfully.',
+ ], 200);
+ }
+
+ return response([
+ 'errors' => ['Failed to save the token.'],
+ ], 500);
+ }
/**
* Get List of Classes
@@ -155,11 +202,12 @@ public function createMsTeamClass(MSTeamCreateClassRequest $createClassRequest)
$authUser = auth()->user();
$token = $authUser->msteam_access_token;
$response = json_decode($this->microsoftTeamRepository->createMsTeamClass($token, $data),true);
-
+
if($response['code'] === 202) {
return response([
'message' => 'Class have been created successfully',
- 'classId' => $response['classId']
+ 'classId' => $response['classId'],
+ 'aSyncUrl'=> $response['aSyncURL'],
], 200);
}
@@ -175,11 +223,11 @@ public function createMsTeamClass(MSTeamCreateClassRequest $createClassRequest)
* Publish the project activities as an assignment
*
* @urlParam Project $project required The Id of a project. Example: 9
- * @bodyParam classId required string Id of the class. Example: Test Class
+ * @bodyParam classId optional string Id of the class. Example: bebe45d4-d0e6-4085-b418-e98a51db70c3
*
* @response 200 {
* "message": [
- * "Project has been published successfully."
+ * "Your request to publish project [project->name] into MS Team has been received and is being processed.
You will be alerted in the notification section in the title bar when complete."
* ]
* }
*
@@ -188,40 +236,28 @@ public function createMsTeamClass(MSTeamCreateClassRequest $createClassRequest)
* "Project must be shared as we are temporarily publishing the shared link."
* ]
* }
- *
- * @response 500 {
- * "errors": "MS Team error message",
- * "statusCode" : MS team status code
- * }
- *
* @param MSTeamCreateAssignmentRequest $createAssignmentRequest
* @param Project $project
* @return Response
*/
public function publishProject(MSTeamCreateAssignmentRequest $createAssignmentRequest, Project $project)
{
- $createAssignmentRequest->validated();
+ $data = $createAssignmentRequest->validated();
if(!$project->shared) { // temporary check will remove it in future
return response([
'errors' => 'Project must be shared as we are temporarily publishing the shared link.',
], 500);
}
- $authUser = auth()->user();
- $token = $authUser->msteam_access_token;
- $classId = $createAssignmentRequest->get('classId');
-
- $response = json_decode($this->microsoftTeamRepository->createMSTeamAssignment($token, $classId, $project), true);
-
- if($response['code'] === 201) {
- return response([
- 'message' => 'Project has been published successfully.',
- ], 200);
- }
+ $classId = isset($data['classId']) ? $data['classId'] : '';
+ // pushed publishing of project in background
+ PublishProject::dispatch(auth()->user(), $project, $classId)->delay(now()->addSecond());
+
return response([
- 'errors' => $response['message'],
- 'statusCode' => $response['code']
- ], 500);
+ 'message' => "Your request to publish project [$project->name] into MS Team has been received and is being processed.
+ You will be alerted in the notification section in the title bar when complete.",
+ ], 200);
+
}
}
diff --git a/app/Http/Controllers/Api/V1/SuborganizationController.php b/app/Http/Controllers/Api/V1/SuborganizationController.php
index 250d67976..2772b341f 100644
--- a/app/Http/Controllers/Api/V1/SuborganizationController.php
+++ b/app/Http/Controllers/Api/V1/SuborganizationController.php
@@ -184,6 +184,13 @@ public function uploadFavicon(SuborganizationUploadFaviconRequest $suborganizati
* @bodyParam tertiary_color string primary font color Example: #515151
* @bodyParam primary_font_family string primary font color Example: Open Sans
* @bodyParam secondary_font_family string primary font color Example: Open Sans
+ * @bodyParam msteam_client_id uuid Client id Example: 123e4567-e89b-12d3-a456-426614174000
+ * @bodyParam msteam_secret_id uuid Secret id Example: 123e4567-e89b-12d3-a456-426614174000
+ * @bodyParam msteam_tenant_id uuid Tenant id Example: 123e4567-e89b-12d3-a456-426614174000
+ * @bodyParam msteam_secret_id_expiry date Secret expiry date Example: 2022-09-29
+ * @bodyParam msteam_project_visibility bool Enable/disable google classroom Example: false
+ * @bodyParam msteam_playlist_visibility bool Enable/disable google classroom Example: false
+ * @bodyParam msteam_activity_visibility bool Enable/disable google classroom Example: false
*
* @responseFile 201 responses/organization/suborganization.json
*
@@ -267,6 +274,13 @@ public function show(Organization $suborganization)
* @bodyParam tertiary_color string primary font color Example: #515151
* @bodyParam primary_font_family string primary font color Example: Open Sans
* @bodyParam secondary_font_family string primary font color Example: Open Sans
+ * @bodyParam msteam_client_id uuid Client id Example: 123e4567-e89b-12d3-a456-426614174000
+ * @bodyParam msteam_secret_id uuid Secret id Example: 123e4567-e89b-12d3-a456-426614174000
+ * @bodyParam msteam_tenant_id uuid Tenant id Example: 123e4567-e89b-12d3-a456-426614174000
+ * @bodyParam msteam_secret_id_expiry date Secret expiry date Example: 2022-09-29
+ * @bodyParam msteam_project_visibility bool Enable/disable google classroom Example: false
+ * @bodyParam msteam_playlist_visibility bool Enable/disable google classroom Example: false
+ * @bodyParam msteam_activity_visibility bool Enable/disable google classroom Example: false
*
* @responseFile responses/organization/suborganization.json
*
diff --git a/app/Http/Requests/V1/CurrikiGo/CreateAssignmentGroupRequest.php b/app/Http/Requests/V1/CurrikiGo/CreateAssignmentGroupRequest.php
new file mode 100644
index 000000000..0914b51b1
--- /dev/null
+++ b/app/Http/Requests/V1/CurrikiGo/CreateAssignmentGroupRequest.php
@@ -0,0 +1,31 @@
+ 'required',
+ 'assignment_group_name' => 'required|string|max:255'
+ ];
+ }
+}
diff --git a/app/Http/Requests/V1/CurrikiGo/CreateAssignmentRequest.php b/app/Http/Requests/V1/CurrikiGo/CreateAssignmentRequest.php
new file mode 100644
index 000000000..b49b12cc3
--- /dev/null
+++ b/app/Http/Requests/V1/CurrikiGo/CreateAssignmentRequest.php
@@ -0,0 +1,34 @@
+ 'required|exists:lms_settings,id',
+ 'counter' => 'sometimes|integer',
+ 'assignment_group_id' => 'required|integer',
+ 'assignment_name' => 'required|string|max:255',
+ 'curriki_activity_id' => 'required|integer'
+ ];
+ }
+}
diff --git a/app/Http/Requests/V1/CurrikiGo/CreateCourseRequest.php b/app/Http/Requests/V1/CurrikiGo/CreateCourseRequest.php
new file mode 100644
index 000000000..69706e227
--- /dev/null
+++ b/app/Http/Requests/V1/CurrikiGo/CreateCourseRequest.php
@@ -0,0 +1,31 @@
+ 'required',
+ 'course_name' => 'required|string|max:255'
+ ];
+ }
+}
diff --git a/app/Http/Requests/V1/CurrikiGo/PublishMoodlePlaylistRequest.php b/app/Http/Requests/V1/CurrikiGo/PublishMoodlePlaylistRequest.php
new file mode 100644
index 000000000..75209f51c
--- /dev/null
+++ b/app/Http/Requests/V1/CurrikiGo/PublishMoodlePlaylistRequest.php
@@ -0,0 +1,32 @@
+ 'required|exists:lms_settings,id',
+ 'counter' => 'sometimes|integer',
+ 'publisher_org' => 'int|nullable'
+ ];
+ }
+}
diff --git a/app/Http/Requests/V1/CurrikiGo/PublishPlaylistRequest.php b/app/Http/Requests/V1/CurrikiGo/PublishPlaylistRequest.php
index 10b7be497..92bd655ad 100644
--- a/app/Http/Requests/V1/CurrikiGo/PublishPlaylistRequest.php
+++ b/app/Http/Requests/V1/CurrikiGo/PublishPlaylistRequest.php
@@ -26,7 +26,9 @@ public function rules()
return [
'setting_id' => 'required|exists:lms_settings,id',
'counter' => 'sometimes|integer',
- 'publisher_org' => 'int|nullable'
+ 'publisher_org' => 'int|nullable',
+ 'creation_type' => 'required|in:modules,assignments',
+ 'canvas_course_id' => 'required|integer'
];
}
}
diff --git a/app/Http/Requests/V1/MSSaveAccessTokenRequest.php b/app/Http/Requests/V1/MSSaveAccessTokenRequest.php
new file mode 100644
index 000000000..ba2048797
--- /dev/null
+++ b/app/Http/Requests/V1/MSSaveAccessTokenRequest.php
@@ -0,0 +1,30 @@
+ 'required'
+ ];
+ }
+}
diff --git a/app/Http/Requests/V1/MSTeamCreateAssignmentRequest.php b/app/Http/Requests/V1/MSTeamCreateAssignmentRequest.php
index 40774e7d2..525a4231d 100644
--- a/app/Http/Requests/V1/MSTeamCreateAssignmentRequest.php
+++ b/app/Http/Requests/V1/MSTeamCreateAssignmentRequest.php
@@ -24,7 +24,8 @@ public function authorize()
public function rules()
{
return [
- 'classId' => 'required|string|max:255'
+ 'classId' => 'UUID|max:255',
+
];
}
}
diff --git a/app/Http/Requests/V1/SuborganizationSave.php b/app/Http/Requests/V1/SuborganizationSave.php
index 15d1b8224..2ca897f40 100644
--- a/app/Http/Requests/V1/SuborganizationSave.php
+++ b/app/Http/Requests/V1/SuborganizationSave.php
@@ -56,6 +56,13 @@ public function rules()
'tertiary_color' => 'string|nullable|max:255',
'primary_font_family' => 'string|nullable|max:255',
'secondary_font_family' => 'string|nullable|max:255',
+ 'msteam_client_id' => 'uuid|nullable|max:255',
+ 'msteam_secret_id' => 'uuid|nullable|max:255',
+ 'msteam_tenant_id' => 'uuid|nullable|max:255',
+ 'msteam_secret_id_expiry' => 'date|nullable',
+ 'msteam_project_visibility' => 'boolean',
+ 'msteam_playlist_visibility' => 'boolean',
+ 'msteam_activity_visibility' => 'boolean',
];
}
diff --git a/app/Http/Requests/V1/SuborganizationUpdate.php b/app/Http/Requests/V1/SuborganizationUpdate.php
index 276610c77..e7a08bbfa 100644
--- a/app/Http/Requests/V1/SuborganizationUpdate.php
+++ b/app/Http/Requests/V1/SuborganizationUpdate.php
@@ -64,6 +64,13 @@ public function rules()
'tertiary_color' => 'string|nullable|max:255',
'primary_font_family' => 'string|nullable|max:255',
'secondary_font_family' => 'string|nullable|max:255',
+ 'msteam_client_id' => 'uuid|nullable|max:255',
+ 'msteam_secret_id' => 'uuid|nullable|max:255',
+ 'msteam_tenant_id' => 'uuid|nullable|max:255',
+ 'msteam_secret_id_expiry' => 'date|nullable',
+ 'msteam_project_visibility' => 'boolean',
+ 'msteam_playlist_visibility' => 'boolean',
+ 'msteam_activity_visibility' => 'boolean',
];
}
diff --git a/app/Http/Resources/V1/OrganizationResource.php b/app/Http/Resources/V1/OrganizationResource.php
index cdbe90862..4c44da542 100644
--- a/app/Http/Resources/V1/OrganizationResource.php
+++ b/app/Http/Resources/V1/OrganizationResource.php
@@ -93,7 +93,14 @@ public function toArray($request)
'primary_font_family' => $this->primary_font_family,
'secondary_font_family' => $this->secondary_font_family,
],
- 'allowed_visibility_type_id' => OrganizationVisibilityTypeResource::collection($this->allowedVisibilityTypes)
+ 'allowed_visibility_type_id' => OrganizationVisibilityTypeResource::collection($this->allowedVisibilityTypes),
+ 'msteam_client_id' => $this->msteam_client_id,
+ 'msteam_secret_id' => $this->msteam_secret_id,
+ 'msteam_tenant_id' => $this->msteam_tenant_id,
+ 'msteam_secret_id_expiry' => $this->msteam_secret_id_expiry,
+ 'msteam_project_visibility' => $this->gcr_project_visibility,
+ 'msteam_playlist_visibility' => $this->gcr_playlist_visibility,
+ 'msteam_activity_visibility' => $this->gcr_activity_visibility
];
}
}
diff --git a/app/Jobs/PublishProject.php b/app/Jobs/PublishProject.php
new file mode 100644
index 000000000..bf863a72a
--- /dev/null
+++ b/app/Jobs/PublishProject.php
@@ -0,0 +1,77 @@
+user = $user;
+ $this->project = $project;
+ $this->classId = $classId;
+ $this->aSyncUrl = '';
+ }
+
+ /**
+ * Execute the job.
+ *
+ * @return void
+ */
+ public function handle(MicrosoftTeamRepositoryInterface $microsoftTeamRepository)
+ {
+ try {
+ if(empty($this->classId)) {
+ $response = $microsoftTeamRepository->createMsTeamClass($this->user->msteam_access_token, ['displayName'=>$this->project->name]);
+ \Log::info($response);
+ $class = json_decode($response, true);
+ $this->classId = $class['classId'];
+ $this->aSyncUrl = $class['aSyncURL'];
+ }
+
+ $microsoftTeamRepository->createMSTeamAssignment($this->user->msteam_access_token, $this->classId, $this->project, $this->aSyncUrl);
+ $userName = rtrim($this->user->first_name . ' ' . $this->user->last_name, ' ');
+
+ $this->user->notify(new ProjectPublishNotification($userName, $this->project->name));
+ } catch (\Exception $e) {
+ \Log::error($e->getMessage());
+ }
+ }
+}
diff --git a/app/Models/Organization.php b/app/Models/Organization.php
index fd4ba2a5b..3b40bf41f 100644
--- a/app/Models/Organization.php
+++ b/app/Models/Organization.php
@@ -44,7 +44,11 @@ class Organization extends Model
'secondary_color',
'tertiary_color',
'primary_font_family',
- 'secondary_font_family'
+ 'secondary_font_family',
+ 'msteam_client_id',
+ 'msteam_secret_id',
+ 'msteam_tenant_id',
+ 'msteam_secret_id_expiry'
];
/**
diff --git a/app/Notifications/ProjectPublishNotification.php b/app/Notifications/ProjectPublishNotification.php
new file mode 100644
index 000000000..0bada50a1
--- /dev/null
+++ b/app/Notifications/ProjectPublishNotification.php
@@ -0,0 +1,91 @@
+userName = $userName;
+ $this->projectName = $projectName;
+
+ }
+
+ /**
+ * Get the notification's delivery channels.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function via($notifiable)
+ {
+ return [ 'database'];
+ }
+
+ /*
+ * G*et the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toDatabase($notifiable)
+ {
+ $message = "Project [$this->projectName] has been published into Microsoft Team successfully.";
+
+ return [
+ 'message' => $message,
+ 'project' => $this->projectName,
+
+ ];
+ }
+
+
+
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ //
+ ];
+ }
+
+ /**
+ * Return broadcast message type
+ * @return string
+ */
+ public function broadcastType()
+ {
+ return 'Publish Notification';
+ }
+}
diff --git a/app/Repositories/MicrosoftTeam/MicrosoftTeamRepository.php b/app/Repositories/MicrosoftTeam/MicrosoftTeamRepository.php
index 9aedb4a54..14c93c81b 100644
--- a/app/Repositories/MicrosoftTeam/MicrosoftTeamRepository.php
+++ b/app/Repositories/MicrosoftTeam/MicrosoftTeamRepository.php
@@ -102,8 +102,9 @@ public function getLoginUrl($gid)
*/
public function getClassesList($token)
{
-
- $apiURL = $this->landingUrl . 'education/classes';
+ $accountId = $this->getUserDetails($token);
+
+ $apiURL = $this->landingUrl . 'users/' . $accountId . '/joinedTeams';
$headers = [
'Content-length' => 0,
'Content-type' => 'application/json',
@@ -114,6 +115,7 @@ public function getClassesList($token)
$statusCode = $response->status();
$responseBody = json_decode($response->getBody(), true);
+
return $responseBody['value'];
}
@@ -135,10 +137,11 @@ public function createMsTeamClass($token, $data)
$response = Http::withHeaders($headers)->withOptions(["verify"=>false])->post($apiURL, $data);
$statusCode = $response->status();
-
+ \Log::info($statusCode);
$returnArr = [
"code" => $statusCode,
"classId" => ($statusCode === 202) ? $this->fetchClassIdFromHeader($response->getHeaders()) : Null,
+ "aSyncURL" => ($statusCode === 202) ? $response->getHeaders()['Location'][0] : Null,
];
return json_encode($returnArr);
}
@@ -147,31 +150,38 @@ public function createMsTeamClass($token, $data)
* @param $token string
* @param $classId string
* @param $project Project
+ * @param $aSyncUrl string
*/
- public function createMSTeamAssignment($token, $classId, $project)
+ public function createMSTeamAssignment($token, $classId, $project, $aSyncUrl)
{
+ \Log::info('in createMSTeamAssignment');
+ if(!empty($aSyncUrl)) {
+ $this->checkClassAsyncStatus($aSyncUrl, $token); // Check if class fully functional
+ }
+
$apiURL = $this->landingUrl . 'education/classes/' . $classId . '/assignments';
-
+ $assignmentDueDays = config('ms-team-configs.assignment_due_days');
+
+ $headers = [
+ 'Content-length' => 0,
+ 'Content-type' => 'application/json',
+ 'Authorization' => 'Bearer ' . $token
+ ];
+
+ $postInput['dueDateTime'] =date('c', strtotime(date('Y-m-d'). ' + ' . $assignmentDueDays . ' days'));
+
$playlists = $project->playlists;
foreach ($playlists as $playlist) {
$activities = $playlist->activities;
foreach($activities as $activity) {
- // Logic is in progress
- $postInput = [
- 'displayName' => $activity->title,
- 'dueDateTime' => '2023-01-01T00:00:00Z', // Need to discuss the due date logic currently hardcoded
- ];
+ $postInput['displayName'] = $activity->title;
- $headers = [
- 'Content-length' => 0,
- 'Content-type' => 'application/json',
- 'Authorization' => 'Bearer ' . $token
- ];
-
- $response = Http::withHeaders($headers)->withOptions(["verify"=>false])->post($apiURL, $postInput);
+ $response = Http::withHeaders($headers)->withOptions(["verify"=>false])
+ ->retry(3, 6000)->post($apiURL, $postInput);
$responseBody = json_decode($response->getBody(), true);
+
$statusCode = $response->status();
if ($statusCode !== 201) {
@@ -208,6 +218,34 @@ public function createMSTeamAssignment($token, $classId, $project)
return json_encode($returnArr);
}
+ /**
+ * @param string $aSyncUrl
+ * @param string $token
+ */
+ private function checkClassAsyncStatus($aSyncUrl, $token)
+ {
+ \Log::info('in checkClassAsyncStatus');
+ if ($aSyncUrl !== Null) {
+ $apiURL = $this->landingUrl . $aSyncUrl;
+ $headers = [
+ 'Content-length' => 0,
+ 'Content-type' => 'application/json',
+ 'Authorization' => 'Bearer ' . $token
+ ];
+
+ $response = Http::withHeaders($headers)->get($apiURL);
+ if ($response->status() === 200) {
+ $responseBody = json_decode($response->getBody(), true);
+ if ($responseBody['status'] === "succeeded") {
+ return $responseBody['status'];
+ } else {
+ sleep(30);
+ $this->checkClassAsyncStatus($aSyncUrl, $token);
+ }
+ }
+ }
+ }
+
/**
* @param string $header
* @return string
@@ -217,4 +255,22 @@ private function fetchClassIdFromHeader($header)
// Can implement teamsAsyncOperation if needed
return substr($header['Content-Location'][0], 8, 36);
}
+
+ /**
+ * @param string $token
+ */
+ private function getUserDetails($token)
+ {
+ $apiURL = $this->landingUrl . '/me';
+ $headers = [
+ 'Content-length' => 0,
+ 'Content-type' => 'application/json',
+ 'Authorization' => 'Bearer ' . $token
+ ];
+
+ $response = Http::withHeaders($headers)->get($apiURL);
+ $responseBody = json_decode($response->getBody(), true);
+ return $responseBody['id'];
+ }
+
}
diff --git a/app/Repositories/MicrosoftTeam/MicrosoftTeamRepositoryInterface.php b/app/Repositories/MicrosoftTeam/MicrosoftTeamRepositoryInterface.php
index 1136c5061..ef0daa6d6 100644
--- a/app/Repositories/MicrosoftTeam/MicrosoftTeamRepositoryInterface.php
+++ b/app/Repositories/MicrosoftTeam/MicrosoftTeamRepositoryInterface.php
@@ -39,7 +39,8 @@ public function createMsTeamClass($token, $data);
/**
* @param $token string
* @param $classId string
- * @param $activity Activity
+ * @param $project Project
+ * @param $aSyncUrl string
*/
- public function createMSTeamAssignment($token, $classId, $activity);
+ public function createMSTeamAssignment($token, $classId, $project, $aSyncUrl);
}
diff --git a/config/constants.php b/config/constants.php
index a103196b2..f6e423d46 100644
--- a/config/constants.php
+++ b/config/constants.php
@@ -50,6 +50,14 @@
'activity_type' => [
'activity' => 'ACTIVITY',
'independent' => 'INDEPENDENT',
- 'standalone' => 'STANDALONE'
+ 'standalone' => 'STANDALONE',
+ ],
+ 'canvas_api_endpoints' => [
+ 'assignment_groups' => 'assignment_groups',
+ 'create_assignment' => 'assignments'
+ ],
+ 'canvas_creation_type' => [
+ 'create_modules' => 'modules',
+ 'create_assignments' => 'assignments'
]
];
diff --git a/config/ms-team-configs.php b/config/ms-team-configs.php
index 53287409f..022134b40 100644
--- a/config/ms-team-configs.php
+++ b/config/ms-team-configs.php
@@ -7,6 +7,7 @@
'oauth_url' => env('MSTEAMS_OAUTH_URL'),
'landing_url' => env('MSTEAMS_LANDING_URL'),
'redirect_url' => env('MSTEAMS_REDIRECT_URL'),
+ 'assignment_due_days' => env('ASSIGNMENT_DUE_DATE_DAYS'),
'scope' => 'https://graph.microsoft.com/.default',
];
\ No newline at end of file
diff --git a/config/smithsonian.php b/config/smithsonian.php
new file mode 100644
index 000000000..ebea1d843
--- /dev/null
+++ b/config/smithsonian.php
@@ -0,0 +1,17 @@
+ env('SMITHSONIAN_API_BASE_URL', 'https://api.si.edu/openaccess/api/v1.0'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Smithsonian API Key
+ |--------------------------------------------------------------------------
+ */
+ 'api_key' => env('SMITHSONIAN_API_KEY', 'invpQb67otWXfxjTj8EYXd77UeCLnSguDczIni5A')
+];
diff --git a/database/migrations/2022_09_14_135742_add_guess_the_answer.php b/database/migrations/2022_09_14_135742_add_guess_the_answer.php
new file mode 100644
index 000000000..838c7447c
--- /dev/null
+++ b/database/migrations/2022_09_14_135742_add_guess_the_answer.php
@@ -0,0 +1,29 @@
+ AddGuessTheAnswerSemanticsSeeder::class,
+ '--force' => true
+ ]);
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ //
+ }
+}
diff --git a/database/migrations/2022_09_19_115439_add_question_set_one_twenty.php b/database/migrations/2022_09_19_115439_add_question_set_one_twenty.php
new file mode 100644
index 000000000..c894b6793
--- /dev/null
+++ b/database/migrations/2022_09_19_115439_add_question_set_one_twenty.php
@@ -0,0 +1,29 @@
+ AddQuestionSetOneTwentySemanticsSeeder::class,
+ '--force' => true
+ ]);
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ //
+ }
+}
diff --git a/database/migrations/2022_09_21_111955_add_essay_fifteen_semantics.php b/database/migrations/2022_09_21_111955_add_essay_fifteen_semantics.php
new file mode 100644
index 000000000..29ff6cd2e
--- /dev/null
+++ b/database/migrations/2022_09_21_111955_add_essay_fifteen_semantics.php
@@ -0,0 +1,29 @@
+ AddEssayFifteenSemanticsSeeder::class,
+ '--force' => true
+ ]);
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ //
+ }
+}
diff --git a/database/migrations/2022_09_22_083747_add_smithsonian_option_to_media_sources_table.php b/database/migrations/2022_09_22_083747_add_smithsonian_option_to_media_sources_table.php
new file mode 100644
index 000000000..8f204b074
--- /dev/null
+++ b/database/migrations/2022_09_22_083747_add_smithsonian_option_to_media_sources_table.php
@@ -0,0 +1,29 @@
+ AddSmithsonianOptionToMediaSourcesSeeder::class,
+ '--force' => true
+ ]);
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+
+ }
+}
diff --git a/database/migrations/2022_09_23_113308_add_column_layout_semantics.php b/database/migrations/2022_09_23_113308_add_column_layout_semantics.php
new file mode 100644
index 000000000..a9193e60b
--- /dev/null
+++ b/database/migrations/2022_09_23_113308_add_column_layout_semantics.php
@@ -0,0 +1,31 @@
+ AddColumnLayoutSemanticsSeeder::class,
+ '--force' => true
+ ]);
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ //
+ }
+}
diff --git a/database/migrations/2022_09_23_500023_organization_role_ui_permission.php b/database/migrations/2022_09_23_500023_organization_role_ui_permission.php
new file mode 100644
index 000000000..3b4e3c955
--- /dev/null
+++ b/database/migrations/2022_09_23_500023_organization_role_ui_permission.php
@@ -0,0 +1,30 @@
+ OrganizationRoleUiPermissionSeeder::class,
+ '--force' => true
+ ]);
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ //
+ }
+}
diff --git a/database/migrations/2022_09_28_091939_add_ms_team_app_keys_to_organizations_table.php b/database/migrations/2022_09_28_091939_add_ms_team_app_keys_to_organizations_table.php
new file mode 100644
index 000000000..9e656835d
--- /dev/null
+++ b/database/migrations/2022_09_28_091939_add_ms_team_app_keys_to_organizations_table.php
@@ -0,0 +1,35 @@
+string('msteam_client_id')->after('gcr_activity_visibility')->nullable()->default(null);
+ $table->string('msteam_secret_id')->after('gcr_activity_visibility')->nullable()->default(null);
+ $table->string('msteam_tenant_id')->after('gcr_activity_visibility')->nullable()->default(null);
+ $table->date('msteam_secret_id_expiry')->nullable()->default(null);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('organizations', function (Blueprint $table) {
+ $table->dropColumn(['msteam_client_id', 'msteam_secret_id', 'msteam_tenant_id', 'msteam_secret_id_expiry']);
+ });
+ }
+}
diff --git a/database/migrations/2022_09_28_109876_add_interactive_book_semantics.php b/database/migrations/2022_09_28_109876_add_interactive_book_semantics.php
new file mode 100644
index 000000000..e86635786
--- /dev/null
+++ b/database/migrations/2022_09_28_109876_add_interactive_book_semantics.php
@@ -0,0 +1,31 @@
+ AddInteractiveBookSemanticsSeeder::class,
+ '--force' => true
+ ]);
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ //
+ }
+}
diff --git a/database/migrations/2022_09_29_112914_add_ms_team_visibility_fields_to_organizations_table.php b/database/migrations/2022_09_29_112914_add_ms_team_visibility_fields_to_organizations_table.php
new file mode 100644
index 000000000..bf11a982b
--- /dev/null
+++ b/database/migrations/2022_09_29_112914_add_ms_team_visibility_fields_to_organizations_table.php
@@ -0,0 +1,34 @@
+boolean('msteam_project_visibility')->nullable()->default(true);
+ $table->boolean('msteam_playlist_visibility')->nullable()->default(false);
+ $table->boolean('msteam_activity_visibility')->nullable()->default(false);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('organizations', function (Blueprint $table) {
+ $table->dropColumn(['msteam_project_visibility', 'msteam_playlist_visibility', 'msteam_activity_visibility']);
+ });
+ }
+}
diff --git a/database/seeds/AddColumnLayoutSemanticsSeeder.php b/database/seeds/AddColumnLayoutSemanticsSeeder.php
new file mode 100644
index 000000000..232852b0f
--- /dev/null
+++ b/database/seeds/AddColumnLayoutSemanticsSeeder.php
@@ -0,0 +1,163 @@
+ "H5P.Column", "major_version" => 1, "minor_version" => 15];
+ $h5pFibLib = DB::table('h5p_libraries')->where($h5pFibLibParams)->first();
+
+ if (empty($h5pFibLib)) {
+ $h5pFibLibId = DB::table('h5p_libraries')->insertGetId([
+ 'name' => 'H5P.Column',
+ 'title' => 'Column',
+ 'major_version' => 1,
+ 'minor_version' => 15,
+ 'patch_version' => 2,
+ 'embed_types' => 'iframe',
+ 'runnable' => 1,
+ 'restricted' => 0,
+ 'fullscreen' => 0,
+ 'preloaded_js' => 'scripts/h5p-column.js',
+ 'preloaded_css' => 'styles/h5p-column.css,styles/custom-column-layout.css',
+ 'drop_library_css' => '',
+ 'semantics' => $this->getSemantics(),
+ 'tutorial_url' => ' ',
+ 'has_icon' => 1
+ ]);
+ // insert libraries languages
+ $this->insertLibrariesLanguages($h5pFibLibId);
+ }
+ }
+
+ /**
+ * Insert Library Language Semantics
+ * @param $h5pFibLibId
+ */
+ private function insertLibrariesLanguages($h5pFibLibId)
+ {
+ // en.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pFibLibId,
+ 'language_code' => 'en',
+ 'translation' => json_encode(json_decode('{
+ "semantics": [
+ {
+ "label": "List of Column Content",
+ "entity": "content",
+ "field": {
+ "fields": [
+ {
+ "label": "Content"
+ },
+ {
+ "label": "Separate content with a horizontal ruler",
+ "options": [
+ {
+ "label": "Automatic (default)"
+ },
+ {
+ "label": "Never use ruler above"
+ },
+ {
+ "label": "Always use ruler above"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ '), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ }
+
+ private function getSemantics() {
+ return '[
+ {
+ "name": "content",
+ "label": "List of Column Content",
+ "importance": "high",
+ "type": "list",
+ "min": 1,
+ "entity": "content",
+ "field": {
+ "name": "content",
+ "type": "group",
+ "fields": [
+ {
+ "name": "content",
+ "type": "library",
+ "importance": "high",
+ "label": "Content",
+ "options": [
+ "H5P.Accordion 1.0",
+ "H5P.Agamotto 1.5",
+ "H5P.Audio 1.5",
+ "H5P.AudioRecorder 1.0",
+ "H5P.Blanks 1.14",
+ "H5P.Chart 1.2",
+ "H5P.Collage 0.3",
+ "H5P.CoursePresentation 1.24",
+ "H5P.Dialogcards 1.9",
+ "H5P.DocumentationTool 1.8",
+ "H5P.DragQuestion 1.14",
+ "H5P.DragText 1.10",
+ "H5P.Essay 1.5",
+ "H5P.GuessTheAnswer 1.5",
+ "H5P.Table 1.1",
+ "H5P.AdvancedText 1.1",
+ "H5P.IFrameEmbed 1.0",
+ "H5P.Image 1.1",
+ "H5P.ImageHotspots 1.10",
+ "H5P.ImageHotspotQuestion 1.8",
+ "H5P.ImageSlider 1.1",
+ "H5P.InteractiveVideo 1.24",
+ "H5P.Link 1.3",
+ "H5P.MarkTheWords 1.11",
+ "H5P.MemoryGame 1.3",
+ "H5P.MultiChoice 1.16",
+ "H5P.Questionnaire 1.3",
+ "H5P.QuestionSet 1.20",
+ "H5P.SingleChoiceSet 1.11",
+ "H5P.Summary 1.10",
+ "H5P.Timeline 1.1",
+ "H5P.TrueFalse 1.8",
+ "H5P.Video 1.6"
+ ]
+ },
+ {
+ "name": "useSeparator",
+ "type": "select",
+ "importance": "low",
+ "label": "Separate content with a horizontal ruler",
+ "default": "auto",
+ "options": [
+ {
+ "value": "auto",
+ "label": "Automatic (default)"
+ },
+ {
+ "value": "disabled",
+ "label": "Never use ruler above"
+ },
+ {
+ "value": "enabled",
+ "label": "Always use ruler above"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]';
+ }
+}
diff --git a/database/seeds/AddEssayFifteenSemanticsSeeder.php b/database/seeds/AddEssayFifteenSemanticsSeeder.php
new file mode 100644
index 000000000..e4033b550
--- /dev/null
+++ b/database/seeds/AddEssayFifteenSemanticsSeeder.php
@@ -0,0 +1,734 @@
+ "H5P.Essay", "major_version" => 1, "minor_version" => 5];
+ $h5pFibLib = DB::table('h5p_libraries')->where($h5pFibLibParams)->first();
+ if (empty($h5pFibLib)) {
+ $h5pFibLibId = DB::table('h5p_libraries')->insertGetId([
+ 'name' => 'H5P.Essay',
+ 'title' => 'Essay',
+ 'major_version' => 1,
+ 'minor_version' => 5,
+ 'patch_version' => 0,
+ 'embed_types' => 'iframe',
+ 'runnable' => 1,
+ 'restricted' => 0,
+ 'fullscreen' => 0,
+ 'preloaded_js' => 'scripts/essay.js',
+ 'preloaded_css' => 'scripts/inputfield.js',
+ 'drop_library_css' => '',
+ 'semantics' => $this->getSemantics(),
+ 'tutorial_url' => ' ',
+ 'has_icon' => 1
+ ]);
+
+ $this->insertDependentLibraries($h5pFibLibId);
+ }
+ }
+
+
+
+ /**
+ * Insert Dependent Libraries
+ * @param $h5pFibLibId
+ */
+ private function insertDependentLibraries($h5pFibLibId)
+ {
+ //Preloaded Dependencies
+ $h5pQuestionParams = ['name' => "H5P.Question", "major_version" => 1, "minor_version" => 5];
+ $h5pQuestionLib = DB::table('h5p_libraries')->where($h5pQuestionParams)->first();
+ $h5pQuestionLibId = $h5pQuestionLib->id;
+
+ DB::table('h5p_libraries_libraries')->insert([
+ 'library_id' => $h5pFibLibId,
+ 'required_library_id' => $h5pQuestionLibId,
+ 'dependency_type' => 'preloaded'
+ ]);
+
+
+ //Preloaded Dependencies
+ $h5pVTextUtilitiesparams = ['name' => "H5P.TextUtilities", "major_version" => 1, "minor_version" => 3];
+ $h5pVTextUtilitiesparamsLib = DB::table('h5p_libraries')->where($h5pVTextUtilitiesparams)->first();
+ $h5pVTextUtilitiesparamsLibId = $h5pVTextUtilitiesparamsLib->id;
+
+ DB::table('h5p_libraries_libraries')->insert([
+ 'library_id' => $h5pFibLibId,
+ 'required_library_id' => $h5pVTextUtilitiesparamsLibId,
+ 'dependency_type' => 'preloaded'
+ ]);
+
+ //Preloaded Dependencies
+ $h5pJoubelUIParams = ['name' => "H5P.JoubelUI", "major_version" => 1, "minor_version" => 3];
+ $h5pJoubelUIParamsLib = DB::table('h5p_libraries')->where($h5pJoubelUIParams)->first();
+ $h5pJoubelUIParamsLibId = $h5pJoubelUIParamsLib->id;
+
+ DB::table('h5p_libraries_libraries')->insert([
+ 'library_id' => $h5pFibLibId,
+ 'required_library_id' => $h5pJoubelUIParamsLibId,
+ 'dependency_type' => 'preloaded'
+ ]);
+
+
+ // Editor Dependencies
+
+ $h5pEditorShowWhenParams = ['name' => "H5PEditor.ShowWhen", "major_version" => 1, "minor_version" => 0];
+ $h5pEditorShowWhenLib = DB::table('h5p_libraries')->where($h5pEditorShowWhenParams)->first();
+ $h5pEditorShowWhenLibId = $h5pEditorShowWhenLib->id;
+
+ DB::table('h5p_libraries_libraries')->insert([
+ 'library_id' => $h5pFibLibId,
+ 'required_library_id' => $h5pEditorShowWhenLibId,
+ 'dependency_type' => 'editor'
+ ]);
+
+ // Editor Dependencies
+
+ $h5pEditorRangeListWhenParams = ['name' => "H5PEditor.RangeList", "major_version" => 1, "minor_version" => 0];
+ $h5pEditorRangeListWhenLib = DB::table('h5p_libraries')->where($h5pEditorRangeListWhenParams)->first();
+ $h5pEditorRangeListWhenLibId = $h5pEditorRangeListWhenLib->id;
+
+ DB::table('h5p_libraries_libraries')->insert([
+ 'library_id' => $h5pFibLibId,
+ 'required_library_id' => $h5pEditorRangeListWhenLibId,
+ 'dependency_type' => 'editor'
+ ]);
+
+ // Editor Dependencies
+
+ $h5pVerticalTabsParams = ['name' => "H5PEditor.VerticalTabs", "major_version" => 1, "minor_version" => 3];
+ $h5pVerticalTabsLib = DB::table('h5p_libraries')->where($h5pVerticalTabsParams)->first();
+ $h5pVerticalTabsLibId = $h5pVerticalTabsLib->id;
+
+ DB::table('h5p_libraries_libraries')->insert([
+ 'library_id' => $h5pFibLibId,
+ 'required_library_id' => $h5pVerticalTabsLibId,
+ 'dependency_type' => 'editor'
+ ]);
+
+ }
+
+ private function getSemantics() {
+ return '[
+ {
+ "name": "media",
+ "type": "group",
+ "label": "Media",
+ "importance": "medium",
+ "fields": [
+ {
+ "name": "type",
+ "type": "library",
+ "label": "Type",
+ "importance": "medium",
+ "options": [
+ "H5P.Image 1.1",
+ "H5P.Video 1.5"
+ ],
+ "optional": true,
+ "description": "Optional media to display above the question."
+ },
+ {
+ "name": "disableImageZooming",
+ "type": "boolean",
+ "label": "Disable image zooming",
+ "importance": "low",
+ "default": false,
+ "optional": true,
+ "widget": "showWhen",
+ "showWhen": {
+ "rules": [
+ {
+ "field": "type",
+ "equals": "H5P.Image 1.1"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "taskDescription",
+ "label": "Task description",
+ "type": "text",
+ "widget": "html",
+ "importance": "high",
+ "description": "Describe your task here. The task description will appear above text input area.",
+ "placeholder": "Summarize the book in 500 characters ...",
+ "enterMode": "div",
+ "tags": [
+ "strong",
+ "em",
+ "u",
+ "a",
+ "ul",
+ "ol",
+ "h2",
+ "h3",
+ "hr",
+ "pre",
+ "code"
+ ]
+ },
+ {
+ "name": "placeholderText",
+ "label": "Help text",
+ "type": "text",
+ "description": "This text should help the user to get started.",
+ "placeholder": "This book is about ...",
+ "importance": "low",
+ "optional": true
+ },
+ {
+ "name": "solution",
+ "type": "group",
+ "label": "Sample solution",
+ "importance": "high",
+ "expanded": true,
+ "description": "You can optionally add a sample solution thats shown after the student created a text. Its called sample solution because there probably is not only one solution",
+ "fields": [
+ {
+ "name": "introduction",
+ "type": "text",
+ "label": "Introduction",
+ "importance": "low",
+ "description": "You can optionally leave the students some explanations about your example. The explanation will only show up if you add an example, too.",
+ "placeholder": "Please remember that you were not expected to come up with the exact same solution. Its just a good example.",
+ "optional": true,
+ "widget": "html",
+ "enterMode": "div",
+ "tags": [
+ "strong",
+ "em",
+ "u",
+ "a",
+ "ul",
+ "ol",
+ "hr",
+ "code"
+ ]
+ },
+ {
+ "name": "sample",
+ "type": "text",
+ "label": "Sample solution text",
+ "importance": "low",
+ "description": "The student will see a \"Show solution\" button after submitting if you provide some text here.",
+ "optional": true,
+ "widget": "html",
+ "enterMode": "div",
+ "tags": [
+ "strong",
+ "a"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "keywords",
+ "label": "Keywords",
+ "importance": "high",
+ "type": "list",
+ "widgets": [
+ {
+ "name": "VerticalTabs",
+ "label": "Default"
+ }
+ ],
+ "min": 1,
+ "entity": "Keyword",
+ "field": {
+ "name": "groupy",
+ "type": "group",
+ "label": "Keyword",
+ "fields": [
+ {
+ "name": "keyword",
+ "type": "text",
+ "label": "Keyword",
+ "description": "Keyword or phrase to look for. Use an asterisk * as a wildcard for one or more characters. Use a slash / at the beginning and the end to use a regular expression.",
+ "importance": "medium"
+ },
+ {
+ "name": "alternatives",
+ "type": "list",
+ "label": "Variations",
+ "description": "Add optional variations for this keyword. Example: For a city add alternatives town, municipality etc. Points will be awarded if the user includes any of the specified alternatives.",
+ "importance": "medium",
+ "entity": "variation",
+ "optional": true,
+ "min": 0,
+ "field": {
+ "name": "alternative",
+ "type": "text",
+ "label": "Keyword variation"
+ }
+ },
+ {
+ "name": "options",
+ "type": "group",
+ "label": "Points, Options and Feedback",
+ "importance": "low",
+ "fields": [
+ {
+ "name": "points",
+ "type": "number",
+ "label": "Points",
+ "default": 1,
+ "description": "Points that the user will get if he/she includes this keyword or its alternatives in the answer.",
+ "min": 1
+ },
+ {
+ "name": "occurrences",
+ "type": "number",
+ "label": "Occurrences",
+ "default": 1,
+ "description": "Define how many occurrences of the keyword or its variations should be awarded with points.",
+ "min": 1
+ },
+ {
+ "name": "caseSensitive",
+ "type": "boolean",
+ "label": "Case sensitive",
+ "default": true,
+ "description": "Makes sure the user input has to be exactly the same as the answer."
+ },
+ {
+ "name": "forgiveMistakes",
+ "type": "boolean",
+ "label": "Forgive minor mistakes",
+ "description": "This will accept minor spelling mistakes (3-9 characters: 1 mistake, more than 9 characters: 2 mistakes)."
+ },
+ {
+ "name": "feedbackIncluded",
+ "type": "text",
+ "label": "Feedback if keyword included",
+ "description": "This feedback will be displayed if the user includes this keyword or its alternatives in the answer.",
+ "optional": true,
+ "maxLength": 1000
+ },
+ {
+ "name": "feedbackMissed",
+ "type": "text",
+ "label": "Feedback if keyword missing",
+ "description": "This feedback will be displayed if the user doesn’t include this keyword or its alternatives in the answer.",
+ "optional": true,
+ "maxLength": 1000
+ },
+ {
+ "name": "feedbackIncludedWord",
+ "type": "select",
+ "label": "Feedback word shown if keyword included",
+ "importance": "low",
+ "description": "This option allows you to specify which word should be shown in front of your feedback if a keyword was found in the text.",
+ "optional": false,
+ "default": "keyword",
+ "options": [
+ {
+ "value": "keyword",
+ "label": "keyword"
+ },
+ {
+ "value": "alternative",
+ "label": "alternative found"
+ },
+ {
+ "value": "answer",
+ "label": "answer given"
+ },
+ {
+ "value": "none",
+ "label": "none"
+ }
+ ]
+ },
+ {
+ "name": "feedbackMissedWord",
+ "type": "select",
+ "label": "Feedback word shown if keyword missing",
+ "importance": "low",
+ "description": "This option allows you to specify which word should be shown in front of your feedback if a keyword was not found in the text.",
+ "optional": false,
+ "default": "none",
+ "options": [
+ {
+ "value": "keyword",
+ "label": "keyword"
+ },
+ {
+ "value": "none",
+ "label": "none"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "overallFeedback",
+ "type": "group",
+ "label": "Overall Feedback",
+ "importance": "low",
+ "expanded": true,
+ "fields": [
+ {
+ "name": "overallFeedback",
+ "type": "list",
+ "widgets": [
+ {
+ "name": "RangeList",
+ "label": "Default"
+ }
+ ],
+ "importance": "high",
+ "label": "Define custom feedback for any score range",
+ "description": "Click the \"Add range\" button to add as many ranges as you need. Example: 0-20% Bad score, 21-91% Average Score, 91-100% Great Score!",
+ "entity": "range",
+ "min": 1,
+ "defaultNum": 1,
+ "optional": true,
+ "field": {
+ "name": "overallFeedback",
+ "type": "group",
+ "importance": "low",
+ "fields": [
+ {
+ "name": "from",
+ "type": "number",
+ "label": "Score Range",
+ "min": 0,
+ "max": 100,
+ "default": 0,
+ "unit": "%"
+ },
+ {
+ "name": "to",
+ "type": "number",
+ "min": 0,
+ "max": 100,
+ "default": 100,
+ "unit": "%"
+ },
+ {
+ "name": "feedback",
+ "type": "text",
+ "label": "Feedback for defined score range",
+ "importance": "low",
+ "placeholder": "Fill in the feedback",
+ "optional": true
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "behaviour",
+ "type": "group",
+ "label": "Behavioural settings",
+ "importance": "low",
+ "description": "These options will let you control how the task behaves.",
+ "fields": [
+ {
+ "name": "minimumLength",
+ "label": "Minimum number of characters",
+ "type": "number",
+ "description": "Specify the minimum number of characters that the user must enter.",
+ "importance": "low",
+ "optional": true,
+ "min": "0"
+ },
+ {
+ "name": "maximumLength",
+ "label": "Maximum number of characters",
+ "type": "number",
+ "description": "Specify the maximum number of characters that the user can enter.",
+ "importance": "low",
+ "optional": true,
+ "min": "0"
+ },
+ {
+ "name": "inputFieldSize",
+ "label": "Input field size",
+ "type": "select",
+ "importance": "low",
+ "description": "The size of the input field in amount of lines it will cover",
+ "options": [
+ {
+ "value": "1",
+ "label": "1 line"
+ },
+ {
+ "value": "3",
+ "label": "3 lines"
+ },
+ {
+ "value": "10",
+ "label": "10 lines"
+ }
+ ],
+ "default": "10"
+ },
+ {
+ "name": "enableRetry",
+ "label": "Enable \"Retry\"",
+ "type": "boolean",
+ "importance": "low",
+ "description": "If checked, learners can retry the task.",
+ "default": true,
+ "optional": true
+ },
+ {
+ "name": "ignoreScoring",
+ "label": "Ignore scoring",
+ "type": "boolean",
+ "importance": "low",
+ "description": "If checked, learners will only see the feedback that you provided for the keywords, but no score.",
+ "default": false,
+ "optional": true
+ },
+ {
+ "name": "pointsHost",
+ "label": "Points in host environment",
+ "type": "number",
+ "importance": "low",
+ "description": "Used to award points in host environment merely for answering (not shown to learner).",
+ "min": 0,
+ "default": 1,
+ "widget": "showWhen",
+ "showWhen": {
+ "rules": [
+ {
+ "field": "ignoreScoring",
+ "equals": true
+ }
+ ]
+ }
+ },
+ {
+ "name": "percentagePassing",
+ "type": "number",
+ "label": "Passing percentage",
+ "description": "Percentage thats necessary for passing",
+ "optional": true,
+ "min": 0,
+ "max": 100,
+ "widget": "showWhen",
+ "showWhen": {
+ "rules": [
+ {
+ "field": "ignoreScoring",
+ "equals": false
+ }
+ ]
+ }
+ },
+ {
+ "name": "percentageMastering",
+ "type": "number",
+ "label": "Mastering percentage",
+ "description": "Percentage thats necessary for mastering. Setting the mastering percentage below 100 % will lower the maximum possible score accordingly. Its intended to give some leeway to students, not to \"graciously accept\" solutions that do not contain all keywords.",
+ "optional": true,
+ "min": 0,
+ "max": 100,
+ "widget": "showWhen",
+ "showWhen": {
+ "rules": [
+ {
+ "field": "ignoreScoring",
+ "equals": false
+ }
+ ]
+ }
+ },
+ {
+ "name": "overrideCaseSensitive",
+ "type": "select",
+ "label": "Override case sensitive",
+ "importance": "low",
+ "description": "This option determines if the \"Case sensitive\" option will be activated for all keywords.",
+ "optional": true,
+ "options": [
+ {
+ "value": "on",
+ "label": "Enabled"
+ },
+ {
+ "value": "off",
+ "label": "Disabled"
+ }
+ ]
+ },
+ {
+ "name": "overrideForgiveMistakes",
+ "type": "select",
+ "label": "Override forgive mistakes",
+ "importance": "low",
+ "description": "This option determines if the \"Forgive mistakes\" option will be activated for all keywords.",
+ "optional": true,
+ "options": [
+ {
+ "value": "on",
+ "label": "Enabled"
+ },
+ {
+ "value": "off",
+ "label": "Disabled"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "checkAnswer",
+ "type": "text",
+ "label": "Text for \"Check\" button",
+ "importance": "low",
+ "default": "Check",
+ "common": true
+ },
+ {
+ "name": "tryAgain",
+ "label": "Text for \"Retry\" button",
+ "type": "text",
+ "importance": "low",
+ "default": "Retry",
+ "common": true
+ },
+ {
+ "name": "showSolution",
+ "type": "text",
+ "label": "Text for \"Show solution\" button",
+ "importance": "low",
+ "default": "Show solution",
+ "common": true
+ },
+ {
+ "name": "feedbackHeader",
+ "type": "text",
+ "label": "Header for panel containing feedback for included/missing keywords",
+ "importance": "low",
+ "default": "Feedback",
+ "common": true
+ },
+ {
+ "name": "solutionTitle",
+ "type": "text",
+ "label": "Label for solution",
+ "importance": "low",
+ "default": "Sample solution",
+ "common": true
+ },
+ {
+ "name": "remainingChars",
+ "type": "text",
+ "label": "Remaining characters",
+ "importance": "low",
+ "common": true,
+ "default": "Remaining characters: @chars",
+ "description": "Message for remaining characters. You can use @chars which will be replaced by the corresponding number."
+ },
+ {
+ "name": "notEnoughChars",
+ "type": "text",
+ "label": "Not enough characters",
+ "importance": "low",
+ "common": true,
+ "default": "You must enter at least @chars characters!",
+ "description": "Message to indicate that the text doesnt contain enough characters. You can use @chars which will be replaced by the corresponding number."
+ },
+ {
+ "name": "messageSave",
+ "type": "text",
+ "label": "Save message",
+ "description": "Message indicating that the text has been saved",
+ "importance": "low",
+ "common": true,
+ "default": "saved"
+ },
+ {
+ "name": "ariaYourResult",
+ "type": "text",
+ "label": "Your result (not displayed)",
+ "description": "Accessibility text used for readspeakers. @score will be replaced by the number of points. @total will be replaced by the maximum possible points.",
+ "importance": "low",
+ "common": true,
+ "default": "You got @score out of @total points"
+ },
+ {
+ "name": "ariaNavigatedToSolution",
+ "type": "text",
+ "label": "Navigation message (not displayed)",
+ "description": "Accessibility text used for readspeakers",
+ "importance": "low",
+ "common": true,
+ "default": "Navigated to newly included sample solution after textarea."
+ },
+ {
+ "name": "currikisettings",
+ "type": "group",
+ "label": "Curriki settings",
+ "importance": "low",
+ "description": "These options will let you control how the curriki studio behaves.",
+ "optional": true,
+ "fields": [
+ {
+ "label": "Do not Show Submit Button",
+ "importance": "low",
+ "name": "disableSubmitButton",
+ "type": "boolean",
+ "default": false,
+ "optional": true,
+ "description": "This option only applies to a standalone activity. The Submit button is required for grade passback to an LMS."
+ },
+ {
+ "label": "Placeholder",
+ "importance": "low",
+ "name": "placeholder",
+ "type": "boolean",
+ "default": false,
+ "optional": true,
+ "description": "This option is a place holder. will be used in future"
+ },
+ {
+ "label": "Curriki Localization",
+ "description": "Here you can edit settings or translate texts used in curriki settings",
+ "importance": "low",
+ "name": "currikil10n",
+ "type": "group",
+ "fields": [
+ {
+ "label": "Text for \"Submit\" button",
+ "name": "submitAnswer",
+ "importance": "low",
+ "type": "text",
+ "default": "Submit",
+ "optional": true
+ },
+ {
+ "label": "Text for \"Placeholder\" button",
+ "importance": "low",
+ "name": "placeholderButton",
+ "type": "text",
+ "default": "Placeholder",
+ "optional": true
+ }
+ ]
+ }
+ ]
+ }
+ ]';
+ }
+}
diff --git a/database/seeds/AddGuessTheAnswerSemanticsSeeder.php b/database/seeds/AddGuessTheAnswerSemanticsSeeder.php
new file mode 100644
index 000000000..b3759025d
--- /dev/null
+++ b/database/seeds/AddGuessTheAnswerSemanticsSeeder.php
@@ -0,0 +1,166 @@
+ "H5P.GuessTheAnswer", "major_version" => 1, "minor_version" => 5];
+ $h5pFibLib = DB::table('h5p_libraries')->where($h5pFibLibParams)->first();
+ if (empty($h5pFibLib)) {
+ $h5pFibLibId = DB::table('h5p_libraries')->insertGetId([
+ 'name' => 'H5P.GuessTheAnswer',
+ 'title' => 'Guess the Answer',
+ 'major_version' => 1,
+ 'minor_version' => 5,
+ 'patch_version' => 1,
+ 'embed_types' => 'iframe',
+ 'runnable' => 1,
+ 'restricted' => 0,
+ 'fullscreen' => 0,
+ 'preloaded_js' => 'guess-the-answer.js',
+ 'preloaded_css' => 'guess-the-answer.css',
+ 'drop_library_css' => '',
+ 'semantics' => $this->getSemantics(),
+ 'tutorial_url' => ' ',
+ 'has_icon' => 1
+ ]);
+
+ // insert dependent libraries
+ $this->insertDependentLibraries($h5pFibLibId);
+
+ // insert libraries languages
+ $this->insertLibrariesLanguages($h5pFibLibId);
+ }
+ }
+ /**
+ * Insert Dependent Libraries
+ * @param $h5pFibLibId
+ */
+ private function insertDependentLibraries($h5pFibLibId)
+ {
+ //Preloaded Dependencies
+ $h5pFontAwesomeParams = ['name' => "FontAwesome", "major_version" => 4, "minor_version" => 5];
+ $h5pFontAwesomeLib = DB::table('h5p_libraries')->where($h5pFontAwesomeParams)->first();
+ $h5pFontAwesomeLibId = $h5pFontAwesomeLib->id;
+
+ DB::table('h5p_libraries_libraries')->insert([
+ 'library_id' => $h5pFibLibId,
+ 'required_library_id' => $h5pFontAwesomeLibId,
+ 'dependency_type' => 'preloaded'
+ ]);
+
+ }
+
+ /**
+ * Insert Library Language Semantics
+ * @param $h5pFibLibId
+ */
+ private function insertLibrariesLanguages($h5pFibLibId)
+ {
+ // en.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pFibLibId,
+ 'language_code' => 'en',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Task description","description":"Describe how the user should solve the task."},{"label":"Media","fields":[{"label":"Type","description":"Optional media to display above the question."}]},{"label":"Descriptive solution label","default":"Click to see the answer.","description":"Clickable text area where the solution will be displayed."},{"label":"Solution text","description":"The solution for the picture."}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // af.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pFibLibId,
+ 'language_code' => 'af',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Taak beskrywing","description":"Beskryf hoe die gebruiker die taak moet oplos."},{"label":"Media","fields":[{"label":"Tipe","description":"Opsionele media wat bo die vraag vertoon word."}]},{"label":"Beskrywende antwoordetiket","default":"Klik om die antwoord te sien.","description":"Klikbare teksarea waar die oplossing vertoon sal word."},{"label":"Antwoordteks","description":"Die antwoord vir die prent."}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+
+ // bg.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pFibLibId,
+ 'language_code' => 'bg',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Описание на задачата","description":"Опишете как потребителят трябва да реши задачата."},{"label":"Медия","fields":[{"label":"Тип","description":"Незадължителна медия, която ще се показва над въпроса."}]},{"label":"Описателен етикет за решение","default":"Кликнете, за да видите отговора.","description":"Текстова област с възможност за кликване, където ще се показва решението."},{"label":"Текст на решението","description":"Решение за изображението."}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // bs.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pFibLibId,
+ 'language_code' => 'bs',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Opis zadatka","description":"Opišite kako će korinik riješiti zadatak."},{"label":"Media","fields":[{"label":"Type","description":"Optional media to display above the question."}]},{"label":"Opisna oznaka za rješenje","default":"Kliknite da vitite odgovor","description":"Tekstualno područje za klikanje je ono područje gdje će biti prikazano rješenje."},{"label":"Tekst rješenja","description":"Rješenje za sliku."}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // ca.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pFibLibId,
+ 'language_code' => 'ca',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Descripció de la tasca","description":"Descriu com l’usuari ha de resoldre la tasca."},{"label":"Recurs","fields":[{"label":"Tipus","description":"Recursos opcionals per mostrar al damunt de la pregunta."}]},{"label":"Etiqueta per a una solució descriptiva","default":"Feu clic per veure la resposta.","description":"Zona de text en què es pot fer clic i on es mostrarà la solució."},{"label":"Text per a Solució","description":"Solució per a la imatge."}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+
+ }
+
+ private function getSemantics() {
+ return '[
+ {
+ "label": "Task description",
+ "importance": "medium",
+ "name": "taskDescription",
+ "type": "text",
+ "widget": "html",
+ "description": "Describe how the user should solve the task.",
+ "enterMode": "p",
+ "tags": [
+ "strong",
+ "em",
+ "u",
+ "a",
+ "ul",
+ "ol",
+ "h2",
+ "h3",
+ "hr",
+ "pre",
+ "code"
+ ],
+ "optional": true
+ },
+ {
+ "name": "media",
+ "type": "group",
+ "label": "Media",
+ "importance": "medium",
+ "fields": [
+ {
+ "name": "type",
+ "type": "library",
+ "label": "Type",
+ "importance": "medium",
+ "options": [
+ "H5P.Image 1.1",
+ "H5P.Video 1.6"
+ ],
+ "optional": true,
+ "description": "Optional media to display above the question."
+ }
+ ]
+ },
+ {
+ "label": "Descriptive solution label",
+ "importance": "low",
+ "name": "solutionLabel",
+ "type": "text",
+ "widget": "textarea",
+ "default": "Click to see the answer.",
+ "description": "Clickable text area where the solution will be displayed.",
+ "optional": true
+ },
+ {
+ "label": "Solution text",
+ "importance": "high",
+ "name": "solutionText",
+ "type": "text",
+ "widget": "textarea",
+ "description": "The solution for the picture."
+ }
+]';
+ }
+}
diff --git a/database/seeds/AddInteractiveBookSemanticsSeeder.php b/database/seeds/AddInteractiveBookSemanticsSeeder.php
new file mode 100644
index 000000000..a7e6b0afe
--- /dev/null
+++ b/database/seeds/AddInteractiveBookSemanticsSeeder.php
@@ -0,0 +1,810 @@
+ "H5P.InteractiveBook", "major_version" => 1, "minor_version" => 6];
+ $h5pIBLib = DB::table('h5p_libraries')->where($h5pIBLibParams)->first();
+
+ if (empty($h5pIBLib)) {
+ $h5pIBLibId = DB::table('h5p_libraries')->insertGetId([
+ 'name' => 'H5P.InteractiveBook',
+ 'title' => 'Interactive Book',
+ 'major_version' => 1,
+ 'minor_version' => 6,
+ 'patch_version' => 4,
+ 'embed_types' => 'iframe',
+ 'runnable' => 1,
+ 'restricted' => 0,
+ 'fullscreen' => 1,
+ 'preloaded_js' => 'dist/h5p-interactive-book.js',
+ 'preloaded_css' => 'dist/h5p-interactive-book.css',
+ 'drop_library_css' => '',
+ 'semantics' => $this->getSemantics(),
+ 'tutorial_url' => ' ',
+ 'has_icon' => 1
+ ]);
+
+ // insert dependent libraries
+ $this->insertDependentLibraries($h5pIBLibId);
+
+ // insert libraries languages
+ $this->insertLibrariesLanguages($h5pIBLibId);
+ }
+ }
+
+ /**
+ * Insert Dependent Libraries
+ * @param $h5pBranchingScenarioLibId
+ */
+ private function insertDependentLibraries($h5pIBLibId)
+ {
+ //Preloaded Dependencies
+ $h5pFontAwesomeParams = ['name' => "FontAwesome", "major_version" => 4, "minor_version" => 5];
+ $h5pFontAwesomeLib = DB::table('h5p_libraries')->where($h5pFontAwesomeParams)->first();
+ $h5pFontAwesomeLibId = $h5pFontAwesomeLib->id;
+
+ $h5pColumnParams = ['name' => "H5P.Column", "major_version" => 1, "minor_version" => 15];
+ $h5pColumnLib = DB::table('h5p_libraries')->where($h5pColumnParams)->first();
+ $h5pColumnLibId = $h5pColumnLib->id;
+
+ $h5pJoubelUIParams = ['name' => "H5P.JoubelUI", "major_version" => 1, "minor_version" => 3];
+ $h5pJoubelUILib = DB::table('h5p_libraries')->where($h5pJoubelUIParams)->first();
+ $h5pJoubelUILibId = $h5pJoubelUILib->id;
+
+
+ // Editor Dependencies
+ $h5pEditorVerticalTabsParams = ['name' => "H5PEditor.VerticalTabs", "major_version" => 1, "minor_version" => 3];
+ $h5pEditorVerticalTabsLib = DB::table('h5p_libraries')->where($h5pEditorVerticalTabsParams)->first();
+ $h5pEditorVerticalTabsLibId = $h5pEditorVerticalTabsLib->id;
+
+ $h5pEditorShowWhenParams = ['name' => "H5PEditor.ShowWhen", "major_version" => 1, "minor_version" => 0];
+ $h5pEditorShowWhenLib = DB::table('h5p_libraries')->where($h5pEditorShowWhenParams)->first();
+ $h5pEditorShowWhenLibId = $h5pEditorShowWhenLib->id;
+
+ $h5pEditorColorSelectorParams = ['name' => "H5PEditor.ColorSelector", "major_version" => 1, "minor_version" => 3];
+ $h5pEditorColorSelectorLib = DB::table('h5p_libraries')->where($h5pEditorColorSelectorParams)->first();
+ $h5pEditorColorSelectorLibId = $h5pEditorColorSelectorLib->id;
+
+ DB::table('h5p_libraries_libraries')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'required_library_id' => $h5pFontAwesomeLibId,
+ 'dependency_type' => 'preloaded'
+ ]);
+ DB::table('h5p_libraries_libraries')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'required_library_id' => $h5pJoubelUILibId,
+ 'dependency_type' => 'preloaded'
+ ]);
+ DB::table('h5p_libraries_libraries')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'required_library_id' => $h5pColumnLibId,
+ 'dependency_type' => 'preloaded'
+ ]);
+
+ DB::table('h5p_libraries_libraries')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'required_library_id' => $h5pEditorVerticalTabsLibId,
+ 'dependency_type' => 'editor'
+ ]);
+ DB::table('h5p_libraries_libraries')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'required_library_id' => $h5pEditorShowWhenLibId,
+ 'dependency_type' => 'editor'
+ ]);
+ DB::table('h5p_libraries_libraries')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'required_library_id' => $h5pEditorColorSelectorLibId,
+ 'dependency_type' => 'editor'
+ ]);
+ }
+
+ /**
+ * Insert Library Language Semantics
+ * @param $h5pIBLibId
+ */
+ private function insertLibrariesLanguages($h5pIBLibId)
+ {
+ // af.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'af',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Aktiveer boek voorblad","description":"\'n Voorblad wys informasie oor die boek voor toegang verkry word"},{"label":"Voorblad","fields":[{"label":"Voorblad beskrywing","description":"Hierdie teks sal die beskrywing van jou boek wees."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Bladsye","entity":"Bladsy","widgets":[{"label":"Verstek"}],"field":{"label":"Item","fields":[{"label":"Bladsy"}]}},{"label":"Gedragsinstellings","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Vertoon inhoudsopgawe as verstek","description":"Indien geaktiveer word die inhoudsopgawe vertoon wanneer die boek oopgemaak word"},{"label":"Vertoon vordering aanwysers","description":"Indien geaktiveer sal daar bladsyaanwysers vertoon word wat stel of die gebruiker klaar met die bladsy is of nie."},{"label":"Aktiveer outomatiese vordering","description":"Indien geaktiveer, word \'n bladsy sonder take as afgehandel beskou. \'n Bladsy met take wanneer alle take gedoen is. Indien gedeaktiveer, sal daar onderaan elke bladsy \'n knoppie wees waarop die gebruiker kan klik as hy klaar is met die bladsy."},{"label":"Vertoon opsomming","description":"Indien dit geaktiveer is, kan die gebruiker \'n opsomming sien en die vordering/antwoorde indien"}]},{"label":"Vertaling vir \"Lees\"","default":"Lees"},{"label":"Vertaling vir \"Vertoon \'Inhoudsopgawe\'\"","default":"Vertoon \'Inhoudsopgawe\'"},{"label":"Vertaling vir \"Versteek \'Inhoudsopgawe\'\"","default":"Versteek \'Inhoudsopgawe\'"},{"label":"Vertaling vir \"Volgende bladsy\"","default":"Volgende bladsy"},{"label":"Vertaling vir \"Vorige bladsy\"","default":"Vorige bladsy"},{"label":"Vertaling vir \"Bladsy voltooi!\"","default":"Bladsy voltooi!"},{"label":"Vertaling vir \"@pages van @total voltooi\" (@pages en @total sal vervang word met werklike waardes)","default":"@pages van @total voltooi"},{"label":"Vertaling vir \"Onvoltooide bladsy\"","default":"Onvoltooide bladsy"},{"label":"Vertaling vir \"Navigeer na bo\"","default":"Navigeer na bo"},{"label":"Vertaling vir \"Ek het die bladsy voltooi\"","default":"Ek het die bladsy voltooi"},{"label":"Volskerm knoppie etiket","default":"Volskerm"},{"label":"Verlaat volskerm knoppie etiket","default":"Verlaat volskerm"},{"label":"Bladsy vordering in boek","description":"\"@count\" sal vervang word deur bladsynommer, en \"@total\" met die totale aantal bladsye","default":"@count van @total bladsye"},{"label":"Interaksie vordering","description":"\"@count\" sal vervang word deur interaksienommer, en \"@total\" met die totale aantal interaksies","default":"@count van @total interaksies"},{"label":"Vertaling vir \"Dien rapport in\"","default":"Dien rapport in"},{"label":"Etiket vir \"herbegin\" knoppie","default":"Herbegin"},{"label":"Opsomming opskrif","default":"Opsomming"},{"label":"Vertaling vir \"Alle interaksies\"","default":"Alle interaksies"},{"label":"Vertaling vir \"Onbeantwoorde interaksies\"","default":"Onbeantwoorde interaksies"},{"label":"Telling","description":"\"@score\" sal vervang word met huidige telling, en \"@maxscore\"sal vervang word met maksimum behaalbare telling","default":"@score / @maxscore"},{"label":"Per bladsy interaksies voltooiing","description":"\"@left\"sal vervang word met oorblywende interaksies, en \"@max\" sal vervang word met totale aantal interaksies op die bladsy","default":"@left van @max interaksies voltooi"},{"label":"Vertaling vir \"Geen interaksies\"","default":"Geen interaksies"},{"label":"Vertaling vir \"Telling\"","default":"Telling"},{"label":"Etiket vir \"Opsom & indien\" knoppie","default":"Opsom & indien"},{"label":"Vertaling vir \"Jy het nog nie interaksies gehad met enige bladsye nie.\"","default":"Jy het nog nie interaksies gehad met enige bladsye nie."},{"label":"Vertaling vir \"Jy moet \'n interaksie hê met ten minste een bladsy voordat jy die opsomming kan sien.\"","default":"Jy moet \'n interaksie hê met ten minste een bladsy voordat jy die opsomming kan sien."},{"label":"Vertaling vir \"Jou antwoorde is ingedien vir hersiening!\"","default":"Jou antwoorde is ingedien vir hersiening!"},{"label":"Opsomming vordering etiket","default":"Boek vordering"},{"label":"Interaksies vordering etiket","default":"Interaksies vordering"},{"label":"Totale telling etiket","default":"Totale telling"},{"label":"Toeganklikheid teks","fields":[{"label":"Bladsyvordering teksalternatief","description":"\'n Alternatiewe teks vir die visuele bladsyvordering. @page en @total veranderlikes beskikbaar.","default":"Bladsy @page van @total."},{"label":"Etiket vir uitbreiding/invou navigasie menu","default":"Skakel navigasie menu"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // ar.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'ar',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"تفعيل غلاف الكتاب","description":"غلاف يعرض المعلومات المتعلقة بالكتاب قبل الدخول"},{"label":"غلاف الصفحة","fields":[{"label":"وصف الغلاف","description":"هذا النص سيكون وصف كتابك."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"الفصول","entity":"الفصل","widgets":[{"label":"إفتراضي"}],"field":{"label":"عنصر","fields":[{"label":"فصل"}]}},{"label":"الإعدادات السلوكية","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"عرض جدول المحتويات كافتراضي","description":"عند التفعيل ، يتم عرض جدول المحتويات عند فتح الكتاب"},{"label":"عرض مؤشرات التقدم","description":"عند التمكين ، ستظهر مؤشرات في كل صفحة توضح ما إذا كان المستخدم قد انتهى من الصفحة أم لا."},{"label":"تمكين التقدم التلقائي","description":"في حالة التمكين ، يتم اعتبار الصفحة بدون مهام عند عرضها. صفحة بها مهام عند الانتهاء من جميع المهام. في حالة التعطيل ، سيكون هناك زر في أسفل كل صفحة لينقر عليها المستخدم عند الانتهاء من الصفحة."},{"label":"Display summary","description":"When enabled the user can see a summary and submit the progress/answers"}]},{"label":"ترجمة تتعلق بـ \"القراءاة\"","default":"القراءاة"},{"label":"ترجمة تتعلق بـ \"عرض \'جدول المحتويات\'\"","default":"عرض \'جدول المحتويات\'"},{"label":"ترجمة تتعلق بـ \"إخفاء \'جدول المحتويات\'\"","default":"إخفاء \'جدول المحتويات\'"},{"label":"ترجمة تتعلق بـ \"الصفحة التالية\"","default":"الصفحة التالية"},{"label":"ترجمة تتعلق بـ \"الصفحة السابقة\"","default":"الصفحة السابقة"},{"label":"ترجمة تتعلق بـ \"الانتهاء من الفصل!\"","default":"الانتهاء من الفصل!"},{"label":"ترجمة تتعلق بـ \"@pages من @total منتهي\" (@pages و @total سيتم استبدال القيم الفعلية)","default":"@pages من @total منتهي"},{"label":"ترجمة تتعلق بـ \"فصل غير منتهي\"","default":"فصل غير منتهي"},{"label":"ترجمة تتعلق بـ \"الذهاب إلى الأعلى\"","default":"الذهاب إلى الأعلى"},{"label":"ترجمة تتعلق بـ \"أنهيت هذه الصفحة\"","default":"أنهيت هذه الصفحة"},{"label":"تسمية زر ملء الشاشة","default":"ملء الشاشة"},{"label":"تسميةالخروج من ملىء الشاشة","default":"الخروج من الشاشة الكاملة"},{"label":"Page progress in book","description":"\"@count\" will be replaced by page count, and \"@total\" with the total number of pages","default":"@count of @total pages"},{"label":"Interaction progress","description":"\"@count\" will be replaced by interaction count, and \"@total\" with the total number of interactions","default":"@count of @total interactions"},{"label":"Translation for \"Submit report\"","default":"Submit Report"},{"label":"Label for \"restart\" button","default":"Restart"},{"label":"Summary header","default":"Summary"},{"label":"Translation for \"All interactions\"","default":"All interactions"},{"label":"Translation for \"Unanswered interactions\"","default":"Unanswered interactions"},{"label":"Score","description":"\"@score\" will be replaced with current score, and \"@maxscore\" will be replaced with max achievable score","default":"@score / @maxscore"},{"label":"Per page interactions completion","description":"\"@left\" will be replaced with remaining interactions, and \"@max\" will be replaced with total number of interactions on the page","default":"@left of @max interactions completed"},{"label":"Translation for \"No interactions\"","default":"No interactions"},{"label":"Translation for \"Score\"","default":"Score"},{"label":"Label for \"Summary & submit\" button","default":"Summary & submit"},{"label":"Translation for \"You have not interacted with any pages.\"","default":"You have not interacted with any pages."},{"label":"Translation for \"You have to interact with at least one page before you can see the summary.\"","default":"You have to interact with at least one page before you can see the summary."},{"label":"Translation for \"Your answers are submitted for review!\"","default":"Your answers are submitted for review!"},{"label":"Summary progress label","default":"Book progress"},{"label":"Interactions progress label","default":"Interactions progress"},{"label":"Total score label","default":"Total score"},{"label":"إمكانية الوصول للنصوص","fields":[{"label":"تقدم الصفحة النصية البديلة","description":"نص بديل للتقدم في الصفحة المرئية. @page و @total ومتغيرات المتاحة.","default":"صفحة @page من @total."},{"label":"وضع علامة لتوسيع / طي قائمة التنقل","default":"تبديل قائمة التنقل"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // bg.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'bg',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Добавяне на корица на книгата","description":"Корица, която показва информация за книгата преди да бъде отворена"},{"label":"Корица","fields":[{"label":"Описание на корицата","description":"Този текст ще бъде описанието на вашата книга."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Раздели","entity":"Раздел","widgets":[{"label":"По подразбиране"}],"field":{"label":"Елемент","fields":[{"label":"Раздел"}]}},{"label":"Настройки на поведение","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Показване съдържанието по подразбиране ","description":"Когато е активирано, съдържанието се показва при отваряне на книгата"},{"label":"Показване на индикатори за напредъка","description":"Когато е активирана, ще има индикатори на страница, показващи на потребителя дали е прочел страницата или не."},{"label":"Активиране на автоматичния индикатор за напредък","description":"Ако е активирано, страница без задачи се счита за извършена, когато е видяна, а страница със задачи, когато всички задачи са изпълнени. Ако е деактивиран, в долната част на всяка страница ще има бутон, който потребителят да щракне, когато приключи със страницата."},{"label":"Display summary","description":"When enabled the user can see a summary and submit the progress/answers"}]},{"label":"Превод за \"Чети\"","default":"Чети"},{"label":"Превод за \"Показване на \'Съдържание\'\"","default":"Покзване на \'Съдържание\'"},{"label":"Превод за \"Скриване на \'Съдържание\'\"","default":"Скриване на \'Съдържание\'"},{"label":"Превод за \"Следваща страница\"","default":"Следваща страница"},{"label":"Превод за \"Предишна страница\"","default":"Предишна страница"},{"label":"Превод за \"Разделът е завършен!\"","default":"Разделът е завършен!"},{"label":"Превод за \"@pages от @total страници са завършени\" (@pages и @total ще бъдат подменени с действителни стойности)","default":"@pages от @total страници са завършени"},{"label":"Превод за \"Непълен раздел\"","default":"Непълен раздел"},{"label":"Превод за \"Връщане в началото\"","default":"Връщане в началото"},{"label":"Превод за \"Завърших тази страница\"","default":"Завърших тази страница"},{"label":"Етикет на бутона На цял екран","default":"На цял екран"},{"label":"Етикет на бутона Изход от цял екран","default":"Изход от цял екран"},{"label":"Page progress in book","description":"\"@count\" will be replaced by page count, and \"@total\" with the total number of pages","default":"@count of @total pages"},{"label":"Interaction progress","description":"\"@count\" will be replaced by interaction count, and \"@total\" with the total number of interactions","default":"@count of @total interactions"},{"label":"Translation for \"Submit report\"","default":"Submit Report"},{"label":"Label for \"restart\" button","default":"Restart"},{"label":"Summary header","default":"Summary"},{"label":"Translation for \"All interactions\"","default":"All interactions"},{"label":"Translation for \"Unanswered interactions\"","default":"Unanswered interactions"},{"label":"Score","description":"\"@score\" will be replaced with current score, and \"@maxscore\" will be replaced with max achievable score","default":"@score / @maxscore"},{"label":"Per page interactions completion","description":"\"@left\" will be replaced with remaining interactions, and \"@max\" will be replaced with total number of interactions on the page","default":"@left of @max interactions completed"},{"label":"Translation for \"No interactions\"","default":"No interactions"},{"label":"Translation for \"Score\"","default":"Score"},{"label":"Label for \"Summary & submit\" button","default":"Summary & submit"},{"label":"Translation for \"You have not interacted with any pages.\"","default":"You have not interacted with any pages."},{"label":"Translation for \"You have to interact with at least one page before you can see the summary.\"","default":"You have to interact with at least one page before you can see the summary."},{"label":"Translation for \"Your answers are submitted for review!\"","default":"Your answers are submitted for review!"},{"label":"Summary progress label","default":"Book progress"},{"label":"Interactions progress label","default":"Interactions progress"},{"label":"Total score label","default":"Total score"},{"label":"Текстове за достъпност","fields":[{"label":"Текстова алтернатива за напредък на страницата","description":"Алтернативен текст за визуалния напредък на страница. Достъпни са променливите @page и @total.","default":"Страница @page от @total."},{"label":"Етикет за разпъване/свиване на навигационното меню","default":"Превключване на менюто за навигация"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // ca.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'ca',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Activa la portada del llibre","description":"Portada en què es mostra informació sobre el llibre abans d’accedir-hi"},{"label":"Portada","fields":[{"label":"Descripció de la portada","description":"Aquest text serà la descripció del llibre."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Pàgines","entity":"Pàgina","widgets":[{"label":"Opció predeterminada"}],"field":{"label":"Element","fields":[{"label":"Pàgina"}]}},{"label":"Opcions de comportament","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Mostra la taula de continguts com a predeterminada","description":"Si aquesta opció està activada, l’índex es mostrarà en obrir el llibre"},{"label":"Mostra els indicadors de progrés","description":"Si aquesta opció està activada, hi haurà indicadors per pàgina que mostraran a l’usuari si ha acabat de llegir la pàgina o no."},{"label":"Activa el progrés automàtic","description":"Si està activat es considerarà que una pàgina sense tasques es realitza quan es visualitza. Una pàgina amb tasques, quan es fan totes les tasques. Si està desactivat hi haurà un botó a la part inferior de cada pàgina perquè l’usuari faci clic quan acabi amb la pàgina."},{"label":"Mostra el resum","description":"Si aquesta opció està activada, l’usuari podrà veure un resum i enviar el progrés i les respostes"}]},{"label":"Traducció de «Llegeix»","default":"Lectura"},{"label":"Traducció per a «Mostra la taula de continguts»","default":"Mostra la ’Taula de continguts’"},{"label":"Traducció per a «Oculta la taula de continguts»","default":"Amaga la ’Taula de continguts’"},{"label":"Traducció de «Pàgina següent»","default":"Pàgina següent"},{"label":"Traducció de «Pàgina anterior»","default":"Pàgina anterior"},{"label":"Traducció de «Pàgina completada!»","default":"Pàgina completada!"},{"label":"Ha finalitzat la traducció de «@pages de @total pàgines» (@pages i @total se substituiran pels valors reals)","default":"@pages de @total completades"},{"label":"Traducció de «Pàgina incompleta»","default":"Pàgina incompleta"},{"label":"Traducció de \"Ves a la part superior\"","default":"Ves a la part superior"},{"label":"Traducció per a «He finalitzat aquesta pàgina»","default":"He acabat aquesta pàgina"},{"label":"Etiqueta del botó de pantalla completa","default":"Pantalla completa"},{"label":"Etiqueta del botó «Surt de la pantalla completa»","default":"Surt de la pantalla completa"},{"label":"Progrés de la pàgina al llibre","description":"«@count» serà substituït pel recompte de pàgines, i «@total» amb el nombre total de pàgines","default":"@count de @total pages"},{"label":"Progrés de la interacció","description":"«@count» serà substituït pel nombre d’interaccions, i «@total» amb el nombre total d’interaccions","default":"@count de @total interactions"},{"label":"Traducció per a «Tramet l’informe»","default":"Tramet l’informe"},{"label":"Etiqueta per al botó «Reinicia»","default":"Reinicia"},{"label":"Capçalera del resum","default":"Resum"},{"label":"Traducció de «Totes les interaccions»","default":"Totes les interaccions"},{"label":"Traducció d\'«Interaccions sense respondre»","default":"Interaccions sense resposta"},{"label":"Puntuació","description":"«@score» se substituirà per la puntuació actual i «@maxscore», per la puntuació màxima que es pot assolir","default":"@score / @maxscore"},{"label":"Compleció d’interaccions per pàgina","description":"«@left» se substituirà per les interaccions restants i «@max», pel nombre total d’interaccions a la pàgina","default":"@left de @max interactions completed"},{"label":"Traducció de «No hi ha cap interacció»","default":"No hi ha cap interacció"},{"label":"Traducció de «Puntuació»","default":"Puntuació"},{"label":"Etiqueta per al botó «Resum i tramesa»","default":"Resum i tramesa"},{"label":"Traducció de «No heu interactuat amb cap pàgina»","default":"No heu interactuat amb cap pàgina."},{"label":"Traducció de «Cal que interaccioneu com a mínim amb una pàgina per poder veure el resum»","default":"Cal que interaccioneu com a mínim amb una pàgina per poder veure el resum."},{"label":"Traducció de «Les vostres respostes s\'han tramès per a revisió»","default":"Les vostres respostes s’han tramès per a revisió!"},{"label":"Etiqueta de progrés del resum","default":"Progrés del llibre"},{"label":"Etiqueta de progrés de les interaccions","default":"Progrés de les interaccions"},{"label":"Etiqueta de puntuació total","default":"Puntuació total"},{"label":"Textos d’accessibilitat","fields":[{"label":"Text alternatiu per al progrés de la pàgina","description":"Un text alternatiu per al progrés de la pàgina visual. Hi ha disponibles les variables @page i @total.","default":"Pàgina @page de @total."},{"label":"Etiqueta per ampliar el menú de navegació o reduir-lo","default":"Activa o desactiva el menú de navegació"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // cs.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'cs',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Povolit obálku knihy","description":"Obálka zobrazuje před přístupem informace týkající se knihy"},{"label":"Obálka","fields":[{"label":"Popis obálky","description":"Tento text bude popisem vaší knihy."},{"label":"Médium obálky","description":"Volitelné médium pro úvod."}]},{"label":"Stránky","entity":"Stránka","widgets":[{"label":"Výchozí"}],"field":{"label":"Položka","fields":[{"label":"Stránka"}]}},{"label":"Nastavení chování","fields":[{"label":"Základní barva","description":"Zvolte základní barvu pro barevné schéma knihy. Prosím, ujistěte se, že máte nastaven dostatečný kontrast.","default":"#1768c4"},{"label":"Zobrazit obsah jako výchozí","description":"Je-li povoleno, zobrazí se obsah při otevření knihy"},{"label":"Zobrazit indikátory průběhu","description":"Je-li tato možnost povolena, budou na stránce indikátory zobrazující uživatele, pokud je na stránce hotový nebo ne."},{"label":"Povolit automatický průběh","description":"Pokud je povoleno, stránka bez úkolů se při prohlížení považuje za hotovou. Stránka s úkoly, když jsou všechny úkoly hotové. Pokud je zakázáno, bude ve spodní části každé stránky tlačítko, na které uživatel po dokončení stránky klikne."},{"label":"Zobrazit souhrn","description":"Je-li tato možnost povolena, uživatel může zobrazit souhrn a odeslat postup / odpovědi"}]},{"label":"Překlad pro \"Číst\"","default":"Číst"},{"label":"Překlad pro \"Zobrazit Obsah\"","default":"Zobrazit \"Obsah\""},{"label":"Překlad pro \"Skrýt Obsah\"","default":"Skrýt \"Obsah\""},{"label":"Překlad pro \"Další stránka\"","default":"Další stránka"},{"label":"Překlad pro \"Předchozí stránka\"","default":"Předchozí stránka"},{"label":"Překlad pro \"Stránka dokončena!\"","default":"Stránka dokončena!"},{"label":"Překlad pro \"@pages z @total dokončeno\" (@pages a @total budou nahrazeny skutečnými hodnotami)","default":"@pages z @total dokončeno"},{"label":"Překlad pror \"Nedokončená stránka\"","default":"Nedokončená stránka"},{"label":"TPřeklad pro \"Přejít nahoru\"","default":"Přejít nahoru"},{"label":"Překlad pro \"Tuto stránku jsem dokončil\"","default":"Tuto stránku jsem dokončil"},{"label":"Popisek tlačítka Celá obrazovka","default":"Celá obrazovka"},{"label":"Popisek tlačítka Ukončit režim celé obrazovky","default":"Ukončit režim celé obrazovky"},{"label":"Průběh stránek v knize","description":"\"@count\" bude nahrazen počtem stránek, a \"@total\" celkovým počtem stránek","default":"@count z @total stránek"},{"label":"Průběh interakce","description":"\"@count\" bude nahrazen počtem interakcí, a \"@total\" celkovým počtem interakcí","default":"@count z @total interakcí"},{"label":"Překlad pro \"Odeslat zprávu\"","default":"Odeslat zprávu"},{"label":"Štítek pro tlačítko \"Restart\"","default":"Restart"},{"label":"Hlavička souhrnu","default":"Souhrn"},{"label":"Překlad pro \"Všechny interakce\"","default":"Všechny interakce"},{"label":"Překlad pro \"Nezodpovězené interakce\"","default":"Nezodpovězené interakce"},{"label":"Skóre","description":"\"@score\" bude nahrazeno aktuálním skóre, a \"@maxscore\" bude nahrazeno maximálním dosažitelným skóre","default":"@score / @maxscore"},{"label":"Dokončených interakcí na stránce","description":"\"@left\"budou nahrazeny zbývajícími interakcemi, a \"@max\" bude nahrazen celkovým počtem interakcí na stránce","default":"@left z @max dokončených interakcí"},{"label":"Překlad pro \"Žádné interakce\"","default":"Žádné interakce"},{"label":"Překlad pro \"Skóre\"","default":"Skóre"},{"label":"Štítek pro tlačítko \"Shrnutí a odeslání\"","default":"Shrnutí a odeslání"},{"label":"Překlad pro \"Nekomunikovali jste s žádnými stránkami.\"","default":"Nekomunikovali jste s žádnými stránkami."},{"label":"Překlad pro \"Než uvidíte souhrn, musíte komunikovat s alespoň jednou stránkou.\"","default":"Než uvidíte souhrn, musíte komunikovat s alespoň jednou stránkou."},{"label":"Překlad pro \"Vaše odpovědi budou odeslány ke kontrole!\"","default":"Vaše odpovědi budou odeslány ke kontrole!"},{"label":"Popisek pro Průběh knihy","default":"Průběh knihy"},{"label":"Popisek pro Průběh interakcí","default":"Průběh interakcí"},{"label":"Popisek pro Celkové skóre","default":"Celkové skóre"},{"label":"Texty přístupnosti","fields":[{"label":"Textová alternativa postupu stránky","description":"Alternativní text pro průběh vizuální stránky. Dostupné proměnné @page a @total.","default":"Stránka @page z @total."},{"label":"Popisek pro rozbalení/sbalení navigační nabídky","default":"Přepnutí navigační nabídky"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // de.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'de',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Titelseite anzeigen","description":"Auf der Titelseite werden Informationen über das Buch angezeigt bevor es geöffnet wird"},{"label":"Titelseite","fields":[{"label":"Beschreibung","description":"Dieser Text wird zur Beschreibung des Buchs unter dem eigentlichen Titel angezeigt."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Seiten","entity":"Seite","widgets":[{"label":"Voreinstellung"}],"field":{"label":"Eintrag","fields":[{"label":"Seite"}]}},{"label":"Verhaltenseinstellungen","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Standardmäßig Inhaltsverzeichnis anzeigen","description":"Wenn gewählt, wird das Inhaltsverzeichnis beim Öffnen des Buchs angezeigt."},{"label":"Fortschrittsanzeige anzeigen","description":"Wenn gewählt, wird bei jedem Kapitel angezeigt, ob die Lernenden es abgeschlossen haben."},{"label":"Fortschritt automatisch erfassen","description":"Wenn gewählt, werden Kapitel ohne Aufgaben als abgeschlossen markiert, sobald sie angezeigt wurden. Kapitel mit interaktiven Aufgaben gelten als abgeschlossen, wenn alle Aufgaben gelöst wurden. Wenn abgewählt, wird am Ende eines Kapitels ein Button angezeigt, den die Lernenden anklicken müssen, wenn sie das Kapitel abgeschlossen haben."},{"label":"Zusammenfassung anzeigen","description":"Wenn gewählt, können die Nutzenden eine Zusammenfassung sehen und ihren Fortschritt/ihre Antworten einsenden."}]},{"label":"Beschriftung für \"Öffnen\"","default":"Öffnen"},{"label":"Beschriftung für \"Inhaltsverzeichnis anzeigen\"","default":"Inhaltsverzeichnis anzeigen"},{"label":"Beschriftung für \"Inhaltsverzeichnis ausblenden\"","default":"Inhaltsverzeichnis ausblenden"},{"label":"Beschriftung für \"Nächste Seite\"","default":"Nächste Seite"},{"label":"Beschriftung für \"Vorherige Seite\"","default":"Vorherige Seite"},{"label":"Beschriftung für \"Seite abgeschlossen!\"","default":"Seite abgeschlossen!"},{"label":"Beschriftung für \"@page von @total Seiten abgeschlossen\" (@pages und @total sind Platzhalter und werden von den echten Werten ersetzt)","default":"@pages von @total Seiten abgeschlossen"},{"label":"Beschriftung für \"Unvollständige Seite\"","default":"Unvollständige Seite"},{"label":"Beschriftung für \"Nach oben springen\"","default":"Nach oben springen"},{"label":"Beschriftung für \"Ich habe diese Seite abgeschlossen\"","default":"Ich habe diese Seite abgeschlossen"},{"label":"Beschriftung des Vollbild-Buttons","default":"Vollbild"},{"label":"Beschriftung des \"Vollbild beenden\"-Buttons","default":"Vollbild beenden"},{"label":"Seitenfortschritt","description":"\"@count\" ist ein Platzhalter und wird durch die Seitenzahl ersetzt, und \"@total\" wird durch die Gesamtseitenzahl ersetzt","default":"@count von @total Seiten"},{"label":"Interaktionsfortschritt","description":"\"@count\" ist ein Platzhalter und wird durch Zahl der Interaktionen ersetzt, und \"@total\" wird durch die Gesamtzahl der Interaktionen ersetzt","default":"@count von @total Interaktionen"},{"label":"Übersetzung für \"Report absenden\"","default":"Report absenden"},{"label":"Beschriftung für den \"Neustart\"-Button","default":"Neustart"},{"label":"Titel für die Zusammenfassung","default":"Zusammenfassung"},{"label":"Übersetzung für \"Alle Interaktionen\"","default":"Alle Interaktionen"},{"label":"Übersetzung für \"Unbeantwortete Interaktionen\"","default":"Unbeantwortete Interaktionen"},{"label":"Punkte","description":"\"@score\" ist ein Platzhalter und wird durch die aktuelle Punktzahl ersetzt, und \"@maxscore\" wird durch die maximal mögliche Punktzahl ersetzt","default":"@score / @maxscore"},{"label":"Fortschritt bei den Interaktionen je Seite","description":"\"@left\" ist ein Platzhalter und wird durch die Anzahl der verbleibenden Interaktionen ersetzt, und \"@max\" wird durch die Gesamtzahl der Interaktionen der Seite ersetzt","default":"@left von @max Interaktionen abgeschlossen"},{"label":"Übersetzung für \"Keine Interaktionen\"","default":"Keine Interaktionen"},{"label":"Übersetzung für \"Punkte\"","default":"Punkte"},{"label":"Beschriftung für den \"Zusammenfassung und Einsenden\"-Button","default":"Zusammenfassung und Einsenden"},{"label":"Übersetzung für \"Du hast noch keine Seiten bearbeitet.\"","default":"Du hast noch keine Seiten bearbeitet."},{"label":"Übersetzung für \"Du musst wenigstens eine Seite bearbeiten, um die Zusammenfassung zu sehen.\"","default":"Du musst wenigstens eine Seite bearbeiten, um die Zusammenfassung zu sehen."},{"label":"Übersetzung für \"Deine Antworten wurden zur Begutachtung versendet!\"","default":"Deine Antworten wurden zur Begutachtung versendet!"},{"label":"Beschriftung für Buchfortschritt in der Zusammenfassung","default":"Buchfortschritt"},{"label":"Beschriftung für Interaktionsfortschritt in der Zusammenfassung","default":"Interaktionsfortschritt"},{"label":"Beschriftung für Gesamtpunktzahl","default":"Gesamtpunktzahl"},{"label":"Texte zur Barrierefreiheit","fields":[{"label":"Textalternative für die Fortschrittsanzeige","description":"Dieser Text ersetzt die grafische Fortschrittsanzeige. (Es können die Platzhalter @page und @total verwendet werden.)","default":"Seite @page von @total."},{"label":"Beschriftung des Buttons, um das Inhaltsverzeichnis ein- und auszublenden","default":"Inhaltsverzeichnis ein- bzw. ausschalten"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // el.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'el',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Ενεργοποίηση εξωφύλλου","description":"Το εξώφυλλο περιέχει πληροφορίες για το βιβλίο"},{"label":"Εξώφυλλο","fields":[{"label":"Περιγραφή εξωφύλλου","description":"Αυτό το κείμενο θα είναι η περιγραφή του βιβλίου σας"},{"label":"Μέσο Εξωφύλλου","description":"Προαιρετικό μέσο για την εισαγωγή."}]},{"label":"Σελίδες","entity":"Σελίδα","widgets":[{"label":"Προεπιλογή"}],"field":{"label":"Αντικείμενο","fields":[{"label":"Σελίδα"}]}},{"label":"Ρυθμίσεις","fields":[{"label":"Βασικό χρώμα","description":"Ορίστε το βασικό χρώμα που θα καθορίσει την χρωματική παλέτα του βιβλίου. Σιγουρευτείτε πως υπάρχει αρκετά υψηλή αντίθεση.","default":"#1768c4"},{"label":"Προβολή πίνακα περιεχομένων ως προεπιλογή","description":"Όταν είναι ενεργό, ο πίνακας περιεχομένων εμφανίζεται μόλις ανοίξει κάποιος/α το βιβλίο"},{"label":"Προβολή Ενδείξεων Προόδου","description":"Όταν είναι ενεργό, σε κάθε σελίδα θα εμφανίζονται ενδείξεις στον/στην χρήστη που θα τον/την ενημερώνουν αν και κατά πόσο έχει ολοκληρώσει τη δραστηριότητά του/της στη συγκεκριμένη σελίδα."},{"label":"Ενεργοποίηση αυτόματης προόδου","description":"Όταν είναι ενεργό μια σελίδα που δεν περιέχει δραστηριότητες θεωρείται ολοκληρωμένη μόλις προβληθεί. Μια σελίδα που περιέχει δραστηριότητες θεωρείται ολοκληρωμένη όταν ολοκληρωθούν όλες οι δραστηριότητες. Αν δεν είναι ενεργό, στο κάτω μέρος κάθε σελίδας θα εμφανίζεται ένα κουμπί που θα πρέπει να πατήσει ο/η χρήστης μόλις ολοκληρώσει την ενασχόλησή του/της με τη συγκεκριμένη σελίδα."},{"label":"Προβολή σύνοψης","description":"Όταν είναι ενεργό, ο/η χρήστης μπορεί να δει μια σύνοψη και να καταχωρεί τις απαντήσεις/πρόοδό του/της"}]},{"label":"Μετάφραση για το \"Ανάγνωση\"","default":"Ανάγνωση"},{"label":"Μετάφραση για το \"Προβολή \'Πίνακα Περιεχομένων\'\"","default":"Προβολή \'Πίνακα Περιεχομένων\'"},{"label":"Μετάφραση για το \"Απόκρυψη \'Πίνακα Περιεχομένων\'\"","default":"Απόκρυψη \'Πίνακα Περιεχομένων\'"},{"label":"Μετάφραση για το \"Επόμενη σελίδα\"","default":"Επόμενη σελίδα"},{"label":"Μετάφραση για το \"Προηγούμενη σελίδα\"","default":"Προηγούμενη σελίδα"},{"label":"Μετάφραση για το \"Ολοκληρωμένη σελίδα!\"","default":"Ολοκληρωμένη σελίδα!"},{"label":"Μετάφραση για το \"@pages από @total έχουν ολοκληρωθεί\" (@pages και @total θα αντικατασταθούν από πραγματικές τιμές)","default":"@pages από @total έχουν ολοκληρωθεί"},{"label":"Μετάφραση για το \"Μη ολοκληρωμένη σελίδα\"","default":"Μη ολοκληρωμένη σελίδα"},{"label":"Μετάφραση για το \"Μετάβαση στην κορυφή\"","default":"Μετάβαση στην κορυφή"},{"label":"Μετάφραση για το \"Έχω ολοκληρώσει αυτήν τη σελίδα\"","default":"Έχω ολοκληρώσει αυτήν τη σελίδα"},{"label":"Ετικέτα κουμπιού πλήρους οθόνης","default":"Πλήρης οθόνη"},{"label":"Ετικέτα κουμπιού εξόδου από προβολή πλήρους οθόνης","default":"Έξοδος από πρόβολή πλήρους οθόνης"},{"label":"Πρόοδος στις σελίδες του βιβλίου","description":"\"@count\" μεταβλητή που θα αντικατασταθεί από τον αριθμό σελίδων και \"@total\" μεταβλητή που θα αντικατασταθεί από τον συνολικό αριθμό των σελίδων","default":"@count από @total σελίδες"},{"label":"Πρόοδος διάδρασης","description":"\"@count\" μεταβλητή που θα αντικατασταθεί από τον αριθμό των αλληλεπιδράσεων και \"@total\" μεταβλητή που θα αντικατασταθεί από τον συνολικό αριθμό των διαδραστικών δραστηριοτήτων","default":"@count από @total δραστηριοτήτων"},{"label":"Μετάφραση για το \"Υποβολή Αναφοράς\"","default":"Υποβολή Αναφοράς"},{"label":"Ετικέτα για το κουμπί \"επανεκκίνηση\"","default":"Επανεκκίνηση"},{"label":"Κεφαλίδα περίληψης","default":"Περίληψη"},{"label":"Μετάφραση για το \"Όλες οι διαδράσεις\"","default":"Όλες οι διαδράσεις"},{"label":"Μετάφραση για το \"Διαδράσεις που δεν απαντήθηκαν\"","default":"Διαδράσεις που δεν απαντήθηκαν"},{"label":"Βαθμολογία","description":"\"@score\" μεταβλητή που θα αντικατασταθεί από την τρέχουσα βαθμολογία και \"@maxscore\" μεταβλητή που θα αντικατασταθεί από τη μέγιστη δυνατή βαθμολογία","default":"@score / @maxscore"},{"label":"Ολοκλήρωση διαδράσεων ανά σελίδα","description":"\"@left\" μεταβλητή που θα αντικατασταθεί από τις διαδράσεις που απομένουν και \"@max\" μεταβλητή που θα αντικατασταθεί από τον συνολικό αριθμό διαδράσεων που υπάρχουν στην σελίδα","default":"@left από @max διαδράσεις έχουν ολοκληρωθεί"},{"label":"Μετάφραση για το \"Δεν υπάρχουν διαδράσεις\"","default":"Δεν υπάρχουν διαδράσεις"},{"label":"Μετάφραση για το \"Βαθμολογία\"","default":"Βαθμολογία"},{"label":"Ετικέτα για το κουμπί \"Περίληψη & υποβολή\"","default":"Περίληψη & υποβολή"},{"label":"Μετάφραση για το \"Δεν έχετε ολοκληρώσει καμία διάδραση σε καμία από τις σελίδες.\"","default":"Δεν έχετε ολοκληρώσει καμία διάδραση σε καμία από τις σελίδες."},{"label":"Μετάφραση για το \"Πρέπει να έχετε ολοκληρώσει τουλάχιστον μια διάδραση σε τουλάχιστον μια σελίδα για να μπορέσετε να προβάλετε την περίληψη.\"","default":"Πρέπει να έχετε ολοκληρώσει τουλάχιστον μια διάδραση σε τουλάχιστον μια σελίδα για να μπορέσετε να προβάλετε την περίληψη."},{"label":"Μετάφραση για το \"Οι απαντήσεις σας έχουν υποβληθεί για έλεγχο!\"","default":"Οι απαντήσεις σας έχουν υποβληθεί για έλεγχο!"},{"label":"Ετικέτα προόδου στο βιβλίο","default":"Πρόοδος στο βιβλίο"},{"label":"Ετικέτα προόδου διαδράσεων","default":"Πρόοδος διαδράσεων"},{"label":"Ετικέτα συνολικής βαθμολογίας","default":"Συνολική βαθμολογία"},{"label":"Κείμενα προσβασιμότητας","fields":[{"label":"Εναλλακτικό κείμενο για την πρόοδο στις σελίδες του βιβλίου","description":"Ένα εναλλακτικό κείμενο για την οπτική αναπαράσταση της προόδου στις σελίδες του βιβλίου. Υπάρχουν οι εξής διαθέσιμες μεταβλητές: @page και @total.","default":"Σελίδα @page από @total."},{"label":"Ετικέτα για την επέκταση / σύμπτυξη του μενού πλοήγησης","default":"Εναλλαγή μενού πλοήγησης"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // es-mx.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'es-mx',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Habilitar portada del libro","description":"Una cubierta que muestra información respecto al libro antes de acceder a él"},{"label":"Página de Portada","fields":[{"label":"Descripción de la portada","description":"Este texto será la descripción de su libro."},{"label":"Medio de portada","description":"Medio opcional para la introducción."}]},{"label":"Páginas","entity":"Página","widgets":[{"label":"Predeterminado"}],"field":{"label":"Elemento","fields":[{"label":"Página"}]}},{"label":"Configuraciones del comportamiento","fields":[{"label":"Color base","description":"Configurar el color base que definirá el esquema general de color del libro. Por favor asegure un contraste suficientemente alto.","default":"#1768c4"},{"label":"Mostrar tabla de contenidos como configuración predeterminada","description":"Cuando se habilita, la tabla de contenidos es mostrada al abrir el libro"},{"label":"Mostrar Indicadores del Progreso","description":"Cuando se habilita, habrá indicadores por página mostrándole al usuario si ha terminado con la página o no."},{"label":"Habilitar progreso automático","description":"Si se habilita, una página sin trabajos es considerada hecha cuando es vista. Una página con trabajos cuando todos los trabajos están hechos. Si se deshabilita, habrá un botón al fondo de cada página para que el usuario pueda hacer clic cuando haya terminado con la página."},{"label":"Mostrar resumen","description":"Cuando se habilita, el usuario puede ver un resumen y enviar el progreso/respuestas"}]},{"label":"Traducción para \"Leer\"","default":"Leer"},{"label":"Traducción para \"Mostrar \'Tabla de contenidos\'\"","default":"Mostrar \'Tabla de contenidos\'"},{"label":"Traducción para \"Ocultar \'Tabla de contenidos\'\"","default":"Ocultar \'Tabla de contenidos\'"},{"label":"Traducción para \"Página siguiente\"","default":"Página siguiente"},{"label":"Traducción para \"Página anterior\"","default":"Página anterior"},{"label":"Traducción para \"¡Página completada!\"","default":"¡Página completada!"},{"label":"Traducción para \"@pages de @total completadas\" (@pages y @total serán remplazadas por los valores actuales)","default":"@pages de @total completadas"},{"label":"Traducción para \"Página incompleta\"","default":"Página incompleta"},{"label":"Traducción para \"Navegar hacia arriba\"","default":"Navegar hacia arriba"},{"label":"Traducción para \"He terminado esta página\"","default":"He terminado esta página"},{"label":"Etiqueta botón pantalla completa","default":"Pantalla completa"},{"label":"Etiqueta botón Salir de pantalla completa","default":"Salir de pantalla completa"},{"label":"Progreso de páginas en libro","description":"\"@count\" será remplazado por el número de página, y \"@total\" por el número total de páginas","default":"@count de @total páginas"},{"label":"Progreso de interacciones","description":"\"@count\" será remplazado por el número de interacción, y \"@total\" por el número total de interacciones","default":"@count de @total interacciones"},{"label":"Traducción para \"Enviar Reporte\"","default":"Enviar Reporte"},{"label":"Etiqueta para botón \"Reiniciar\"","default":"Reiniciar"},{"label":"Encabezado del resumen","default":"Resumen"},{"label":"Traducción para \"Todas las interacciones\"","default":"Todas las interacciones"},{"label":"Traducción para \"Interacciones no respondidas\"","default":"Interacciones no respondidas"},{"label":"Puntaje","description":"\"@score\" será remplazado por el puntaje actual, y \"@maxscore\" será remplazado por el máximo puntaje obtenible","default":"@score / @maxscore"},{"label":"Finalización de interacciones por página","description":"\"@left\" será remplazado por las interacciones restantes, y \"@max\" será remplazado por el número total de interacciones en la página","default":"@left de @max interacciones completadas"},{"label":"Traducción para \"Sin interacciones\"","default":"Sin interacciones"},{"label":"Traducción para \"Puntaje\"","default":"Puntaje"},{"label":"Etiqueta para botón \"Resumen y Envío\"","default":"Resumen y Envío"},{"label":"Traducción para \"Usted no ha interactuado con ninguna página.\"","default":"Usted no ha interactuado con ninguna página."},{"label":"Traducción para \"Usted tiene que interactuar con al menos una página antes de que pueda ver el resumen.\"","default":"Usted tiene que interactuar con al menos una página antes de que pueda ver el resumen."},{"label":"Traducción para \"¡Sus respuestas han sido enviadas para revisión!\"","default":"¡Sus respuestas son enviadas para revisión!"},{"label":"Etiqueta del progreso del resumen","default":"Progreso del libro"},{"label":"Etiqueta del progreso de interacciones","default":"Progreso de interacciones"},{"label":"Etiqueta del puntaje total","default":"Puntaje total"},{"label":"Textos de Accesibilidad","fields":[{"label":"Alternativa textual para Progreso de páginas","description":"Un texto alternativo para el progreso visual de páginas. @page y @total son variables disponibles.","default":"Página @page de @total."},{"label":"Etiqueta para menú de navegación expandible/colapsable","default":"Alternar menú de navegación"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // es.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'es',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Habilitar cubierta de libro","description":"Una cubierta que muestra información sobre el libro antes de acceder a él"},{"label":"Página de Cubierta","fields":[{"label":"Descripción de la cubierta","description":"Este texto será la descripción de tu libro."},{"label":"Medios de cubierta","description":"Medios opcionales para la introducción."}]},{"label":"Páginas","entity":"Página","widgets":[{"label":"Por defecto"}],"field":{"label":"Elemento","fields":[{"label":"Página"}]}},{"label":"Configuración del comportamiento","fields":[{"label":"Color base","description":"Configura el color base que definirá el esquema general de color del libro. Por favor asegúrate de usar un contraste lo suficientemente alto.","default":"#1768c4"},{"label":"Mostrar tabla de contenidos por defecto","description":"Cuando se habilita, la tabla de contenidos se muestra al abrir el libro"},{"label":"Mostrar Indicadores del progreso","description":"Cuando se habilita, se usan indicadores por página mostrándole al usuario si ha terminado con la página o no."},{"label":"Habilitar progreso automático","description":"Si se habilita, se considera que se ha terminado una página sin tareas cuando el usuario la visita. Una página con tareas cuando todos los tareas están hechas. Si se deshabilita, habrá un botón al fondo de cada página para que el usuario pueda hacer clic cuando haya terminado con la página."},{"label":"Mostrar resumen","description":"Cuando se habilita, el usuario puede ver un resumen y enviar el progreso/respuestas"}]},{"label":"Traducción para \"Leer\"","default":"Leer"},{"label":"Traducción para \"Mostrar \'Tabla de contenidos\'\"","default":"Mostrar \'Tabla de contenidos\'"},{"label":"Traducción para \"Ocultar \'Tabla de contenidos\'\"","default":"Ocultar \'Tabla de contenidos\'"},{"label":"Traducción para \"Página siguiente\"","default":"Página siguiente"},{"label":"Traducción para \"Página anterior\"","default":"Página anterior"},{"label":"Traducción para \"¡Página completada!\"","default":"¡Página completada!"},{"label":"Traducción para \"@pages de @total completadas\" (@pages y @total serán reemplazados por los valores actuales)","default":"@pages de @total completadas"},{"label":"Traducción para \"Página incompleta\"","default":"Página incompleta"},{"label":"Traducción para \"Ir a la parte superior\"","default":"Ir a la parte superior"},{"label":"Traducción para \"He terminado esta página\"","default":"He terminado esta página"},{"label":"Etiqueta botón pantalla completa","default":"Pantalla completa"},{"label":"Etiqueta botón Salir de pantalla completa","default":"Salir de pantalla completa"},{"label":"Progreso de páginas en libro","description":"\"@count\" será reemplazado por el número de página, y \"@total\" por el número total de páginas","default":"@count de @total páginas"},{"label":"Progreso de interacciones","description":"\"@count\" será reemplazado por el número de interacción, y \"@total\" por el número total de interacciones","default":"@count de @total interacciones"},{"label":"Traducción para \"Enviar Informe\"","default":"Enviar Informe"},{"label":"Etiqueta para botón \"Reiniciar\"","default":"Reiniciar"},{"label":"Encabezado del resumen","default":"Resumen"},{"label":"Traducción para \"Todas las interacciones\"","default":"Todas las interacciones"},{"label":"Traducción para \"Interacciones no respondidas\"","default":"Interacciones no respondidas"},{"label":"Puntuación","description":"Se reemplazará \"@score\" por la puntuación actual, y \"@maxscore\" por la puntuación máxima posible","default":"@score / @maxscore"},{"label":"Finalización de interacciones por página","description":"\"@left\" se reemplazará por las interacciones restantes, y \"@max\" por el número total de interacciones en la página","default":"@left de @max interacciones completadas"},{"label":"Traducción para \"Sin interacciones\"","default":"Sin interacciones"},{"label":"Traducción para \"Puntuación\"","default":"Puntuación"},{"label":"Etiqueta para botón \"Resumen y envío\"","default":"Resumen y envío"},{"label":"Traducción para \"No has interactuado con ninguna página.\"","default":"No has interactuado con ninguna página."},{"label":"Traducción para \"Tienes que interactuar con al menos una página antes de poder ver el resumen.\"","default":"Tienes que interactuar con al menos una página para poder ver el resumen."},{"label":"Traducción para \"¡Se han enviado tus respuestas para revisión!\"","default":"¡Se han enviado tus respuestas para revisión!"},{"label":"Etiqueta del progreso del resumen","default":"Progreso del libro"},{"label":"Etiqueta del progreso de interacciones","default":"Progreso de interacciones"},{"label":"Etiqueta de puntuación total","default":"Puntuación total"},{"label":"Textos de accesibilidad","fields":[{"label":"Alternativa textual para progreso de páginas","description":"Un texto alternativo para el progreso visual de páginas. @page y @total son las variables disponibles.","default":"Página @page de @total."},{"label":"Etiqueta para expandir/contraer el menú de navegación","default":"Cambiar menú de navegación"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // et.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'et',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Luba tiitelleht","description":"Leht, mis näitab teavet raamatu kohta enne selle avamist"},{"label":"Tiitelleht","fields":[{"label":"Tiitellehe kirjeldus","description":"See tekst kirjeldab sinu raamatut."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Peatükid","entity":"Peatükk","widgets":[{"label":"Vaikimisi"}],"field":{"label":"Üksus","fields":[{"label":"Peatükk"}]}},{"label":"Käitumisseaded","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Kuva vaikimisi sisukorda","description":"Kui on lubatud, siis raamatu avamisel näidatakse sisukorda"},{"label":"Näida edenemisosutit","description":"Kui on lubatud, siis on lehel osutid, mis näitavad kasutajale, kas ta on lehega lõpule jõudnud või mitte."},{"label":"Võimalda automaatne edenemine","description":"Kui on lubatud, siis ülesanneteta lehekülg loetakse vaatamisel läbituks, ülesannetega lehekülg peale kõigi ülesannete täitmist. Kui keelatud, siis on iga lehe all nupp, mida kasutaja peab lehe läbituks märkimiseks vajutama."},{"label":"Kuva kokkuvõtet","description":"Kui lubatud, siis kasutaja näeb kokkuvõtet ning saab oma tulemused edastada/vaadata"}]},{"label":"\"Loe\" nupu tõlge","default":"Loe"},{"label":"\"Kuva \'sisukord\'\" nupu tõlge","default":"Kuva \'sisukord\'"},{"label":"\"Peida \'sisukord\'\" nupu tõlge","default":"Peida \'sisukord\'"},{"label":"\"Järgmine lehekülg\" nupu tõlge","default":"Järgmine lehekülg"},{"label":"\"Eelmine lehekülg\" nupu tõlge","default":"Eelmine lehekülg"},{"label":"\"Peatükk läbitud!\" tõlge","default":"Peatükk läbitud!"},{"label":"Tõlge tehtud \"@pages leheküljele @total leheküljest\" (@pages ja @total asendatakse tegelike väärtusega)","default":"@pages / @total läbitud"},{"label":"\"Peatükk pooleli\" tõlge","default":"Peatükk pooleli"},{"label":"\"Liigu lehekülje ülaossa\" tõlge","default":"Liigu lehkülje ülaossa"},{"label":"\"Olen selle lehe läbinud\" tõlge","default":"Olen selle lehe läbinud"},{"label":"Täisekraan nupu silt","default":"Täisekraan"},{"label":"Välju täisekraanilt nupu silt","default":"Välju täisekraanilt"},{"label":"Page progress in book","description":"\"@count\" will be replaced by page count, and \"@total\" with the total number of pages","default":"@count of @total pages"},{"label":"Interaction progress","description":"\"@count\" will be replaced by interaction count, and \"@total\" with the total number of interactions","default":"@count of @total interactions"},{"label":"Translation for \"Submit report\"","default":"Submit Report"},{"label":"Label for \"restart\" button","default":"Restart"},{"label":"Summary header","default":"Kokkuvõte"},{"label":"Translation for \"All interactions\"","default":"Kõik harjutused"},{"label":"Translation for \"Unanswered interactions\"","default":"Vastamata harjutused"},{"label":"Tulemus","description":"\"@score\" will be replaced with current score, and \"@maxscore\" will be replaced with max achievable score","default":"@score / @maxscore"},{"label":"Harjutuste edenemine lehe kohta","description":"\"@left\" will be replaced with remaining interactions, and \"@max\" will be replaced with total number of interactions on the page","default":"@left / @max harjutusest täidetud"},{"label":"Translation for \"No interactions\"","default":"Harjutused puuduvad"},{"label":"Translation for \"Score\"","default":"Tulemus"},{"label":"Label for \"Summary & submit\" button","default":"Kokkuvõte & vastuste esitamine"},{"label":"Translation for \"You have not interacted with any pages.\"","default":"Sa ei ole veel lehtesid vaadanud."},{"label":"Translation for \"You have to interact with at least one page before you can see the summary.\"","default":"Pead vähemalt ühte lehte vaatama enne kui soovid kokkuvõtte lehte vaadata."},{"label":"Translation for \"Your answers are submitted for review!\"","default":"Vastused on edastatud ülevaatamiseks!"},{"label":"Summary progress label","default":"Edenemine"},{"label":"Interactions progress label","default":"Harjutuste edenemine"},{"label":"Total score label","default":"Tulemused"},{"label":"Puudega inimest toetavad tekstid","fields":[{"label":"Lehekülje edenemise tekstialternatiiv","description":"Alternatiivtekst visuaalsele lehel edenemise osutile. Kasutatavad muutujad on @page ja @total.","default":"Lehekülg @page kokku @total lehest."},{"label":"Silt navigeerimismenüü avamiseks ja sulgemiseks","default":"Ava või sulge navigeerimismenüü"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // eu.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'eu',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Gaitu liburuaren portada","description":"Liburuan sartu aurretik bere informazioa erakusten duen portada bat"},{"label":"Portadako orria","fields":[{"label":"Portadaren deskribapena","description":"Testu hau zure liburuaren deskribapena izango da."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Kapituluak","entity":"Kapitulua","widgets":[{"label":"Lehenetsitakoa"}],"field":{"label":"Elementua","fields":[{"label":"Kapitulua"}]}},{"label":"Portaeren ezarpenak","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Erakutsi eduki-taula modu lehenetsian","description":"Gaituz gero eduki-taula erakutsiko da liburua irekitzean"},{"label":"Erakutsi aurrerapenaren adierazleak","description":"Gaituz gero orri bakoitzean erabiltzaileari orri amaitu duen edo ez erakusten duten adierazleak egongo dira."},{"label":"Gaitu aurrerapen autommatikoa","description":"Gaituz gero zereginik gabeko orri bat ikusitakoan osatutzat emango da. Zereginak dituen orri bat zeregin guztiak osatzean osatuko da. Desgaituz gero orri bakoitzaren amaieran botoi bat agertuko da erabiltzaileak orria amaitzean klik egin dezan."},{"label":"Erakutsi laburpena","description":"Gaituz gero erabiltzaileak laburpen bat ikusi eta aurrerapena/erantzunako bidali ditzake"}]},{"label":"\"Read\"-erako itzulpena","default":"Irakurri"},{"label":"\"Display \'Table of contents\'\"-erako itzulpena","default":"Erakutsi \'Eduki-taulak\'"},{"label":"\"Hide \'Table of contents\'\"-erako itzulpena","default":"Ezkutatu \'Eduki-taulak\'"},{"label":"\"Next page\"-erako itzulpena","default":"Hurrengo orria"},{"label":"\"Previous page\"-erako itzulpena","default":"Aurreko orria"},{"label":"\"Page completed!\"-erako itzulpena","default":"Kapitulua osatu duzu!"},{"label":"\"@pages of @total completed\"-erako itzulpena (@pages eta @total benetako balioekin ordezkatuko dira)","default":"@total-(e)tik @pages osatu dituzu"},{"label":"\"Incomplete page\"-erako itzulpena","default":"Osatu gabeko kapitulua"},{"label":"\"Navigate to the top\"-erako itzulpena","default":"Nabigatu goraino"},{"label":"\"I have finished this page\"-erako itzulpena","default":"Orri hau amaitu dut"},{"label":"Pantaila-osoan botoiaren etiketa","default":"Pantaila-osoan"},{"label":"Irten pantaila-osotik botoiaren etiketa","default":"Irten pantaila-osotik"},{"label":"Liburuko orrien aurrerapena","description":"\"@count\" orriaren zenbakiarekin ordezkatuko da, eta \"@total\" guztirako orri kopuruarekin","default":"@count orri guztirako @total orrietatik"},{"label":"Interakzioaren aurrerapena","description":"\"@count\" interakzioaren zenbakiarekin ordezkatuko da, eta \"@total\" guztirako interazkio kopuruarekin","default":"@count guztirako @total interakzioetatik"},{"label":"\"Submit report\" testuaren itzulpena","default":"Bidali Txostena"},{"label":"\"berrabiarazi\" botoiaren etiketa","default":"Berrabiarazi"},{"label":"Laburpenaren goiburua","default":"Laburpena"},{"label":"\"All interactions\" testuaren itzulpena","default":"Interakzio guztiak"},{"label":"\"Unanswered interactions\" testuaren itzulpena","default":"Erantzun gabeko interakzioak"},{"label":"Emaitza","description":"\"@score\" une horretako emaitzarekin ordezkatuko da, eta \"@maxscore\" lortu daitekeen gehienezko emaitzarekin","default":"@score / @maxscore"},{"label":"Orriko interakzioen osaketa","description":"\"@left\" geratzen diren interakzioekin ordezkatuko da, eta \"@max\" orriko guztirako interakzio kopuruarekin","default":"@left geratzen dira orriko @max interakzioetatik"},{"label":"\"No interactions\" testuaren itzulpena","default":"Interakziorik ez"},{"label":"\"Score\" testuaren itzulpena","default":"Emaitza"},{"label":"\"Laburpena & bidali\" botoiaren etiketa","default":"Laburpena & bidali"},{"label":"\"You have not interacted with any pages.\" testuaren itzulpena","default":"Ez duzu inongo orrirekin interakziorik izan."},{"label":"\"You have to interact with at least one page before you can see the summary.\" testuaren itzulpena","default":"Gutxienez orri batekin interakzioa izan behar duzu laburpena ikusi aurretik."},{"label":"\"Your answers are submitted for review!\" testuaren itzulpena","default":"Zure erantzunak berrikusiak izan daitezen bidali dira!"},{"label":"Aurrerapenaren laburpenaren etiketa","default":"Liburuaren aurrerapena"},{"label":"Interakzioaren aurrerapenaren etiketa","default":"Interakzioaren aurrerapena"},{"label":"Emaitza guztiraren etiketa","default":"Emaitza guztira"},{"label":"Eskuragarritasun testuak","fields":[{"label":"Orri-aurrerapen ordezko testuala","description":"Orriaren aurrerapen bisualaren ordezko testua. @page eta @total aldagaiak daude eskuragarri.","default":"@total-(e)tik @page. orria."},{"label":"Nabigazio-menua zabaldu edo tolesteko etiketa","default":"Zabaldu/Tolestu nabigazio-menua"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // fa.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'fa',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"فعالسازی جلد کتاب","description":"جلدی که پیش از دسترسی به کتاب، اطلاعاتی را درباره آن نشان میدهد"},{"label":"جلد","fields":[{"label":"توصیف جلد","description":"این متن توصیف کتابتان خواهد بود."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"صفحه","entity":"صفحه","widgets":[{"label":"پیشفرض"}],"field":{"label":"مطلب","fields":[{"label":"صفحه"}]}},{"label":"تنظیمات عملکرد","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"نمایش پیشفرض فهرست موضوعات","description":"در صورت فعالسازی، فهرست موضوعات با باز شدن کتاب نمایش داده میشود"},{"label":"نمایش شاخصهای پیشرفت","description":"در صورت فعالسازی، شاخصهایی در هر صفحه وجود خواهند داشت که به کاربر نشان میدهد آیا کار او با آن صفحه تمام شده است یا نه."},{"label":"فعالسازی پیشروی خودکار","description":"در صورت فعالسازی، یک صفحه بدون تکلیف پس از اینکه مشاهده شود، انجام شده در نظر گرفته میشود. یک صفحه با تکلیف هم وقتی انجام شده در نظر گرفته میشود که همه تکلیفها انجام شود. در صورت غیرفعالسازی، دکمهای در زیر هر صفحه قرار خواهد گرفت تا کاربر در صورت اتمام کار در آن صفحه روی آن کلیک کند."},{"label":"نمایش جمعبندی","description":"در صورت فعالسازی، کاربر میتواند جمعبندی را ببیند و پیشرفت/پاسخها را ارسال کند"}]},{"label":"ترجمه بخوان","default":"بخوان"},{"label":"ترجمه نمایش فهرست موضوعات","default":"نمایش فهرست موضوعات"},{"label":"ترجمه پنهانسازی فهرست موضوعات","default":"پنهانسازی فهرست موضوعات"},{"label":"ترجمه صفحه بعد","default":"صفحه بعد"},{"label":"ترجمه صفحه قبل","default":"صفحه قبل"},{"label":"ترجمه صفحه تکمیل شد!","default":"صفحه تکمیل شد!"},{"label":"ترجمه @pages صفحه از کل @total صفحه تکمیل شد (@pages و @total با مقادیر واقعی جایگزین میشوند)","default":"@pages صفحه از کل @total صفحه تکمیل شد"},{"label":"ترجمه صفحه تکمیل نشده","default":"صفحه تکمیل نشده"},{"label":"ترجمه راهبری به بالا","default":"راهبری به بالا"},{"label":"ترجمه من این صفحه را به پایان رساندهام","default":"من این صفحه را به پایان رساندهام"},{"label":"برچسب دکمه تمامصفحه","default":"تمامصفحه"},{"label":"برچسب دکمه خروج از تمامصفحه","default":"خروج از تمامصفحه"},{"label":"پیشرفت صفحه در کتاب","description":"@count با شماره صفحه جایگزین میشود، و @total با تعداد کل صفحات جایگزین میشود","default":"صفحه @count از @total"},{"label":"پیشرفت تعامل","description":"@count با شماره تعامل جایگزین میشود، و @total با تعداد کل تعاملات جایگزین میشود","default":"تعامل @count از @total"},{"label":"ترجمه ارسال گزارش","default":"ارسال گزارش"},{"label":"برچسب دکمه شروع مجدد","default":"شروع مجدد"},{"label":"سرصفحه جمعبندی","default":"جمعبندی"},{"label":"ترجمه همه تعاملات","default":"همه تعاملات"},{"label":"ترجمه تعاملات پاسخ داده نشده","default":"تعاملات پاسخ داده نشده"},{"label":"نمره","description":"@score با نمره فعلی جایگزین میشود، و @maxscore با بالاترین نمره ممکن جایگزین میشود","default":"@score / @maxscore"},{"label":"تکمیل تعاملات در صفحه","description":"@left با تعاملات باقیمانده جایگزین خواهد شد، و @max با تعداد کل تعاملات در صفحه جایگزین خواهد شد","default":"@left تعامل از کل @max تعامل تکمیل شد"},{"label":"ترجمه بدون تعامل","default":"بدون تعامل"},{"label":"ترجمه نمره","default":"نمره"},{"label":"برچسب دکمه جمعبندی و ارسال","default":"جمعبندی و ارسال"},{"label":"ترجمه شما با هیچ صفحهای تعامل نداشتید","default":"شما با هیچ صفحهای تعامل نداشتید."},{"label":"ترجمه شما پیش از اینکه بتوانید جمعبندی را ببینید، باید حداقل با یک صفحه تعامل داشته باشید","default":"شما پیش از اینکه بتوانید جمعبندی را ببینید، باید حداقل با یک صفحه تعامل داشته باشید."},{"label":"ترجمه پاسخهای شما برای بازنگری ارسال شدند","default":"پاسخهای شما برای بازنگری ارسال شدند!"},{"label":"برچسب پیشرفت جمعبندی","default":"پیشرفت کتاب"},{"label":"برچسب پیشرفت تعاملات","default":"پیشرفت تعاملات"},{"label":"برچسب نمره کل","default":"نمره کل"},{"label":"متون دسترسپذیری","fields":[{"label":"بدیل متنی پیشرفت صفحه","description":"یک متن بدیل برای پیشرفت صفحه دیداری. متغیرهای @page و @total در دسترساند.","default":"صفحه @page از @total."},{"label":"برچسب بازکردن/بستن منوی راهبری","default":"بازکردن/بستن منوی راهبری"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // fi.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'fi',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Ota kansisivu käyttöön","description":"Kansisivu sisältää tietoa kirjasta ennen sen avaamista."},{"label":"Kansisivu","fields":[{"label":"Alaotsikko","description":"Tämä teksti näkyy pienemmässä koossa pääotsikon alapuolella."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Kappaleet","entity":"Kappale","widgets":[{"label":"Oletus"}],"field":{"label":"Osio","fields":[{"label":"Kappale"}]}},{"label":"Käyttäytymisasetukset","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Sisällysluettelon näkyminen oletuksena","description":"Näyttää sisällysluettelon kirjan avaamisen yhteydessä."},{"label":"Näytä edistymispalkki","description":"Näyttää kappaleissa palkin, joka ilmaisee, kuinka paljon kirjan sisältöä on jäljellä."},{"label":"Ota automaattinen edistyminen käyttöön","description":"Merkitsee heti katselun yhteydessä suoritetuksi kappaleen, jolla ei ole tehtäviä. Tehtäviä sisältävät kappaleet merkitään suoritetuiksi, kun kaikki tehtävät on tehty. Jos tämä asetus on poissa käytöstä, jokaisen kappaleen alareunassa on painike, jota klikkaamalla käyttäjä merkitsee kappaleen suoritetuksi."},{"label":"Näytä yhteenveto","description":"Näyttää käyttäjälle yhteenvedon vastauksista, ennen kuin ne lähetetään tarkistettavaksi."}]},{"label":"\"Lue\"-painikkeen teksti","default":"Lue"},{"label":"\"Näytä sisällysluettelo\" -painikkeen teksti","default":"Näytä sisällysluettelo"},{"label":"\"Piilota sisällysluettelo\" -painikkeen teksti","default":"Piilota sisällysluettelo"},{"label":"\"Seuraava sivu\" -painikkeen teksti","default":"Seuraava sivu"},{"label":"\"Edellinen sivu\" -painikkeen teksti","default":"Edellinen sivu"},{"label":"Käännös tekstille \"Kappale suoritettu!\"","default":"Kappale suoritettu!"},{"label":"Käännös tekstille \"@pages / @total kappaletta suoritettu\" (tekstien @pages ja @total tilalla näkyvät todelliset arvot)","default":"@pages / @total kappaletta suoritettu"},{"label":"Käännös tekstille \"Keskeneräinen kappale\"","default":"Keskeneräinen kappale"},{"label":"\"Siirry ylös\" -painikkeen teksti","default":"Siirry ylös"},{"label":"\"Olen suorittanut tämän kappaleen.\" -painikkeen teksti","default":"Olen suorittanut tämän kappaleen."},{"label":"Kokoruututila-painikkeen teksti","default":"Kokoruututila"},{"label":"Poistu kokoruututilasta -painikkeen teksti","default":"Poistu kokoruututilasta"},{"label":"Kappaleita suoritettu","description":"Tekstin \"@count\" tilalla on suoritettujen kappaleiden lukumäärä ja tekstin \"@total\" tilalla on kaikkien kappaleiden lukumäärä","default":"@count / @total kappaletta"},{"label":"Tehtäviä suoritettu","description":"Tekstin \"@count\" tilalla on suoritettujen tehtävien lukumäärä ja tekstin \"@total\" tilalla on kaikkien tehtävien lukumäärä","default":"@count / @total tehtävää"},{"label":"\"Lähetä tarkistettavaksi\" -painikkeen teksti","default":"Lähetä tarkistettavaksi"},{"label":"\"Aloita uudelleen\" -painikkeen teksti","default":"Aloita uudelleen"},{"label":"Yhteenveto-sivun otsikko","default":"Yhteenveto"},{"label":"\"Kaikki tehtävät\" -pudotusvalikkotekstin käännös","default":"Kaikki tehtävät"},{"label":"\"Vastaamattomat tehtävät\" -pudotusvalikkotekstin käännös","default":"Vastaamattomat tehtävät"},{"label":"Pistemäärä","description":" Muuttujan \"@score\" tilalla näytetään saavutettu pistemäärä ja muuttujan \"@maxscore\" tilalla näytetään korkein mahdollinen pistemäärä.","default":"@score / @maxscore"},{"label":"Suoritetut tehtävät kappalekohtaisesti","description":" Muuttujan \"@left\" tilalla näytetään kappaleen vastaamattomien tehtävien määrä ja muuttujan \"@max\" tilalla näytetään kappaleessa olevien tehtävien lukumäärä.","default":"@left / @max tehtävää suoritettu"},{"label":"Käännös tekstille \"Ei tehtäviä\"","default":"Ei tehtäviä"},{"label":"Pistemäärän yhteydessä näytettävän \"Tulos\"-tekstin käännös","default":"Tulos"},{"label":"\"Yhteenveto & lähetys\" -painikkeen teksti","default":"Yhteenveto & lähetys"},{"label":"Käännös tekstille \"Et ole tehnyt yhtään tehtävää.\"","default":"Et ole tehnyt yhtään tehtävää."},{"label":"Käännös tekstille \"Sinun on suoritettava vähintään yksi tehtävä ennen kuin voit nähdä yhteenvedon.\"","default":"Sinun on suoritettava vähintään yksi tehtävä ennen kuin voit nähdä yhteenvedon."},{"label":"Käännös tekstille \"Vastauksesi on lähetetty tarkistettavaksi!\"","default":"Your answers are submitted for review!"},{"label":"Kirjan edistyminen -otsikko","default":"Kirjan edistyminen"},{"label":"Tehtävien edistyminen -otsikko","default":"Tehtävien edistyminen"},{"label":"Yhteispisteet-otsikko","default":"Yhteispisteet"},{"label":"Saavutettavuuteen liittyvät tekstit","fields":[{"label":"Kappaleita suoritettu -palkin vaihtoehtoinen teksti","description":"Vaihtoehtoinen teksti kappaleiden edistymisen seurannan palkille. Käytössä muuttujat @page ja @total.","default":"Suoritettu @page kappaletta. Kappaleita on yhteensä @total."},{"label":"Näytä/piilota navigaatiovalikko -painikkeen teksti","default":"Näytä/piilota navigaatiovalikko"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // fr.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'fr',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Activer la couverture du livre","description":"Une couverture montre les informations concernant le livre avant l\'accès"},{"label":"Page de couverture","fields":[{"label":"Description de la couverture","description":"Ce texte sera la description de votre livre"},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Pages","entity":"Page","widgets":[{"label":"Par défaut"}],"field":{"label":"Item","fields":[{"label":"Page"}]}},{"label":"Behavioural settings","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Afficher la table des matières par défaut","description":"Lorsque cette option est activée, la table des matières s\'affiche à l\'ouverture du livre"},{"label":"Afficher les indicateurs de progrès","description":"Lorsqu\'il est activé, il y aura des indicateurs par page indiquant à l\'utilisateur s\'il en a fini ou non avec la page."},{"label":"Activer la progression automatique","description":"Si elle est activée, une page sans tâches est considérée comme terminée lorsqu\'elle est visualisée. Une page avec des tâches lorsque toutes les tâches sont effectuées. Si elle est désactivée, un bouton sera placé au bas de chaque page pour que l\'utilisateur puisse cliquer lorsqu\'il a terminé la page."},{"label":"Afficher le résumé","description":"Lorsqu\'il est activé, l\'utilisateur peut voir un résumé et soumettre les progrès/réponses"}]},{"label":"Intitulé pour \"Lire\"","default":"Lire"},{"label":"Intitulé pour \"Afficher la \'Table des matières\'\"","default":"Afficher la \'Table des matières\'"},{"label":"Intitulé pour \"Cacher la \'Table des matières\'\"","default":"Cacher la \'Table des matières\'"},{"label":"Intitulé pour \"Page suivante\"","default":"Page suivante"},{"label":"Intitulé pour \"Page précédente\"","default":"Page précédente"},{"label":"Intitulé pour \"Page terminée!\"","default":"Page terminée!"},{"label":"Intitulé pour \"@pages sur @total terminé\" (@pages et @total sera remplacé par des valeurs réelles)","default":"@pages sur @total terminé"},{"label":"Intitulé pour \"Page non terminée\"","default":"Page non terminée"},{"label":"Intitulé pour \"Revenir en haut\"","default":"Revenir en haut"},{"label":"Intitulé pour \"J\'ai terminé cette page\"","default":"J\'ai terminé cette page"},{"label":"Libellé du bouton plein écran","default":"Plein écran"},{"label":"Libellé du bouton de sortie en plein écran","default":"Réduire"},{"label":"Avancement de la lecture","description":"\"@count\" sera remplacé par le nombre de pages lues et \"@total\" par le nombre total de pages","default":"@count sur @total pages"},{"label":"Avancement dans les interactions","description":"\"@count\" sera remplacé par le nombre d\'interactions accomplies et \"@total\" avec le nombre total d\'interactions","default":"@count sur @total interactions"},{"label":"Intitulé pour \"Soumettre le rapport\"","default":"Soumettre le rapport"},{"label":"Libellé du bouton \"relancer\"","default":"Relancer"},{"label":"Sommaire","default":"Sommaire"},{"label":"Intitulé pour \"Toutes les interactions\"","default":"Toutes les interactions"},{"label":"Intitulé pour \"Interactions sans réponse\"","default":"Interactions sans réponse"},{"label":"Score","description":"\"@score\" sera remplacé par le score actuel, et \"@maxscore\" sera remplacé par le score maximum réalisable","default":"@score / @maxscore"},{"label":"Achèvement des interactions par page","description":"\"@left\" sera remplacé par les interactions restantes, et \"@max\" sera remplacé par le nombre total d\'interactions sur la page","default":"@left sur @max interactions réalisées"},{"label":"Intitulé pour \"Aucune interaction\"","default":"Aucune interaction"},{"label":"Intitulé pour \"Score\"","default":"Score"},{"label":"Libellé du bouton \"Résumé et transmission\"","default":"Résumé et transmission"},{"label":"Intitulé pour \"Vous n\'avez interagi avec aucune page.\"","default":"Vous n\'avez interagi avec aucune page."},{"label":"Intitulé pour \"Vous devez interagir avec au moins une page avant de pouvoir voir le résumé.\"","default":"Vous devez interagir avec au moins une page avant de pouvoir voir le résumé."},{"label":"Intitulé pour \"Vos réponses sont soumises à examen !\"","default":"Vos réponses sont soumises à examen !"},{"label":"Étiquette de progression dans le sommaire","default":"Avancement dans la lecture"},{"label":"Intitulé pour Avancement dans les interactions","default":"Avancement des interactions"},{"label":"Intitulé pour Score total","default":"Score total"},{"label":"Textes pour l\'accessibilité","fields":[{"label":"Texte alternatif pour l\'avancement dans la lecture","description":"Un texte alternatif pour la progression visuelle de la page. Les variables @page et @total sont disponibles.","default":"Page @page sur @total."},{"label":"Intitulé pour étendre/réduire le menu de navigation","default":"Étendre/Réduire le menu"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // gl.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'gl',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Activar a cuberta do libro","description":"Unha cuberta que amosa información sobre o libro antes de entrar nel"},{"label":"Páxina de Cuberta","fields":[{"label":"Descrición da cuberta","description":"Este texto será a descrición do teu libro."},{"label":"Cuberta mediana","description":"Medio opcional para a introdución."}]},{"label":"Páxinas","entity":"Páxina","widgets":[{"label":"Por defecto"}],"field":{"label":"Elemento","fields":[{"label":"Páxina"}]}},{"label":"Configuración do comportamento","fields":[{"label":"Cor base","description":"Establece a cor base que definirá o esquema de cores global do libro. Asegúrate de establecer un contraste suficientemente alto.","default":"#1768c4"},{"label":"Amosar a táboa de contidos por defecto","description":"Amósase a táboa de contidos cando se abre o libro"},{"label":"Amosar indicadores de progreso","description":"Activa indicadores para cada páxina que indican ao usuario se xa leu a páxina ou non."},{"label":"Activar progreso automático","description":"Se está activado, considerarase rematada calquera páxina que non conteña tarefas ao vela e calquera páxina que conteña tarefas cando todas as tarefas estean rematadas. Se está desactivado, haberá un botón no pé de cada páxina para que usuario prema nel cando remate con ela."},{"label":"Amosar resumo","description":"Se está activado, o ususario pode ver un resumo e enviar o seu progreso ou respostas"}]},{"label":"Tradución para \"Ler\"","default":"Ler"},{"label":"Tradución para \"Amosar \'Táboa de contidos\'\"","default":"Amosar \'Táboa de contidos\'"},{"label":"Tradución para \"Agachar \'Táboa de contidos\'\"","default":"Agochar \'Táboa de contidos\'"},{"label":"Tradución para \"Páxina seguinte\"","default":"Páxina seguinte"},{"label":"Tradución para \"Páxina anterior\"","default":"Páxina anterior"},{"label":"Tradución para \"Páxina completa!\"","default":"Páxina completa!"},{"label":"Tradución para \"@pages de @total completadas\" (@pages e @total subsituiranse polos valores actuais)","default":"@pages de @total completadas"},{"label":"Tradución para \"Páxina incompleta\"","default":"Páxina incompleta"},{"label":"Tradución para \"Ir á parte superior\"","default":"Ir á parte superior"},{"label":"Tradución para \"Rematei esta páxina\"","default":"Rematei esta páxina"},{"label":"Etiqueta do botón pantalla completa","default":"Pantalla completa"},{"label":"Etiqueta do botón saír de pantalla completa","default":"Saír de pantalla completa"},{"label":"Progreso coas páxinas do libro","description":"\"@count\" substituirase polo número de páxinas visitadas e \"@total\" polo número total de páxinas","default":"@count de @total páxinas"},{"label":"Progreso da interacción","description":"\"@count\" substituirase polo número de interaccións rexistradas e \"@total\" polo número total de interaccións","default":"@count de @total interaccións"},{"label":"Tradución para \"enviar informe\"","default":"Enviar Informe"},{"label":"Etiqueta para o botón \"reiniciar\"","default":"Reiniciar"},{"label":"Cabeceira do resumo","default":"Resumo"},{"label":"Tradución para \"Todas as interaccións\"","default":"Todas as interaccións"},{"label":"Tradución para \"Interaccións non contestadas\"","default":"Interaccións non contestadas"},{"label":"Puntuación","description":"\"@score\" substituirase pola puntuación actual, e \"@maxscore\" pola puntuación máxima que se poida acadar","default":"@score / @maxscore"},{"label":"Completado de interaccións por páxina","description":"\"@left\" substituirase polo número de interaccións restantes e \"@max\" polo número total de interaccións na páxina","default":"@left de @max interaccións completadas"},{"label":"Tradución para \"Non hai interaccións\"","default":"Non hai interaccións"},{"label":"Tradución para \"Puntuación\"","default":"Puntuación"},{"label":"Etiqueta para o botón \"Enviar & resumo\"","default":"Enviar & resumo"},{"label":"Tradución para \"Non interaccionaches con ningunha páxina.\"","default":"Non interaccionaches con ningunha páxina."},{"label":"Tradución para \"Tes que interaccionar cunha páxina polo menos antes de poder ver o resumo.\"","default":"Tes que interaccionar cunha páxina polo menos antes de poder ver o resumo."},{"label":"Tradución para \"Enviáronse as túas respostas para revisión!\"","default":"Enviáronse as túas respostas para revisión!!"},{"label":"Etiqueta do progreso do resumo","default":"Progreso no libro"},{"label":"Etiqueta do progreso das interaccións","default":"Progreso nas interaccións"},{"label":"Etiqueta da puntuación total","default":"Puntuación total"},{"label":"Textos de accesibilidade","fields":[{"label":"Alternativa textual para o progreso de páxina","description":"Un texto alternativo para o progreso visual de páxina. Variables dispoñibles: @page e @total.","default":"Páxina @page de @total."},{"label":"Etiqueta para expandir/colapsar o menú de navegación","default":"Alternar o menú de navegación"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // he.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'he',
+ 'translation' => json_encode(json_decode('{"semantics":[{"description":"A cover that shows info regarding the book before access","label":"Enable book cover"},{"fields":[{"label":"Cover description","description":"This text will be the description of your book."},{"label":"Cover medium","description":"Optional medium for the introduction."}],"label":"Cover Page"},{"label":"Pages","widgets":[{"label":"Default"}],"field":{"fields":[{"label":"Page"}],"label":"Item"},"entity":"Page"},{"fields":[{"label":"Base color","default":"#1768c4","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast."},{"description":"When enabled the table of contents is showed when opening the book","label":"Display table of contents as default"},{"description":"When enabled there will be indicators per page showing the user if he is done with the page or not.","label":"Display Progress Indicators"},{"description":"If enabled a page without tasks is considered done when viewed. A page with tasks when all tasks are done. If disabled there will be a button at the bottom of every page for the user to click when done with the page.","label":"Enable automatic progress"},{"description":"When enabled the user can see a summary and submit the progress/answers","label":"Display summary"}],"label":"Behavioural settings"},{"default":"Read","label":"Translation for \"Read\""},{"default":"Display \'Table of contents\'","label":"Translation for \"Display \'Table of contents\'\""},{"default":"Hide \'Table of contents\'","label":"Translation for \"Hide \'Table of contents\'\""},{"default":"Next page","label":"Translation for \"Next page\""},{"default":"Previous page","label":"Translation for \"Previous page\""},{"default":"Page completed!","label":"Translation for \"Page completed!\""},{"default":"@pages of @total completed","label":"Translation for \"@pages of @total completed\" (@pages and @total will be replaced by actual values)"},{"default":"Incomplete page","label":"Translation for \"Incomplete page\""},{"default":"Navigate to the top","label":"Translation for \"Navigate to the top\""},{"default":"I have finished this page","label":"Translation for \"I have finished this page\""},{"default":"Fullscreen","label":"Fullscreen button label"},{"default":"Exit fullscreen","label":"Exit fullscreen button label"},{"description":"\"@count\" will be replaced by page count, and \"@total\" with the total number of pages","label":"Page progress in book","default":"@count of @total pages"},{"label":"Interaction progress","default":"@count of @total interactions","description":"\"@count\" will be replaced by interaction count, and \"@total\" with the total number of interactions"},{"default":"Submit Report","label":"Translation for \"Submit report\""},{"default":"Restart","label":"Label for \"restart\" button"},{"default":"Summary","label":"Summary header"},{"default":"All interactions","label":"Translation for \"All interactions\""},{"default":"Unanswered interactions","label":"Translation for \"Unanswered interactions\""},{"description":"\"@score\" will be replaced with current score, and \"@maxscore\" will be replaced with max achievable score","label":"Score","default":"@score / @maxscore"},{"label":"Per page interactions completion","default":"@left of @max interactions completed","description":"\"@left\" will be replaced with remaining interactions, and \"@max\" will be replaced with total number of interactions on the page"},{"default":"No interactions","label":"Translation for \"No interactions\""},{"default":"Score","label":"Translation for \"Score\""},{"default":"Summary & submit","label":"Label for \"Summary & submit\" button"},{"default":"You have not interacted with any pages.","label":"Translation for \"You have not interacted with any pages.\""},{"default":"You have to interact with at least one page before you can see the summary.","label":"Translation for \"You have to interact with at least one page before you can see the summary.\""},{"default":"Your answers are submitted for review!","label":"Translation for \"Your answers are submitted for review!\""},{"default":"Book progress","label":"Summary progress label"},{"default":"Interactions progress","label":"Interactions progress label"},{"default":"Total score","label":"Total score label"},{"fields":[{"label":"Page progress textual alternative","default":"Page @page of @total.","description":"An alternative text for the visual page progress. @page and @total variables available."},{"default":"Toggle navigation menu","label":"Label for expanding/collapsing navigation menu"}],"label":"Accessibility texts"}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // it.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'it',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Attiva la copertina del libro","description":"Una copertina che mostra informazioni sul libro prima dell\'accesso"},{"label":"Copertina","fields":[{"label":"Descrizione della copertina","description":"Questo testo descriverà il tuo libro."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Pagine","entity":"Pagina","widgets":[{"label":"Predefinito"}],"field":{"label":"Item","fields":[{"label":"Pagina"}]}},{"label":"Impostazioni di esecuzione","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Mostra la tavola dei contenuti predefiniti","description":"Quando attivo, la tavola dei contenuti viene mostrata all\'apertura del libro"},{"label":"Mostra gli indicatori di progresso","description":"Quando attivo, ci saranno degli indicatori in ogni pagina, per mostrare all\'utente se ha o non ha finito con quella pagina."},{"label":"Attiva progressione automatica","description":"Se abilitato, una pagina senza compiti è considerata fatta quando è stata visualizzata; viceversa, una pagina con compiti lo è quando tutti sono stati portati a termine. Se disabilitato, in fondo a ogni pagina ci sarà un pulsante su cui l\'utente può cliccare quando ha finito con quella pagina"},{"label":"Mostra sommario","description":"Quando attivo, l\'utente può vedere un sommario e inviare la risposta o andare avanti"}]},{"label":"Traduzione per \"Leggi\"","default":"Leggi"},{"label":"Traduzione per \"Mostra \'Indice dei contenuti\'\"","default":"Mostra \'Indice dei contenuti\'"},{"label":"Traduzione per \"Nascondi \'Indice dei contenuti\'\"","default":"Nascondi \'Indice dei contenuti\'"},{"label":"Traduzione per \"Prossima pagina\"","default":"Prossima pagina"},{"label":"Traduzione per \"Pagina precedente\"","default":"Pagina precedente"},{"label":"Traduzione per \"Capitolo completato!\"","default":"Capitolo completato!"},{"label":"Traduzione per \"@pages di @total pagine completate\" (@pages e @total sarà sostituito dai valori attuali)","default":"@pages di @total pagine completate"},{"label":"Traduzione per \"Capitolo incompleto\"","default":"Capitolo incompleto"},{"label":"Traduzione per \"Torna in alto\"","default":"Torna in alto"},{"label":"Traduzione per \"Ho terminato questa pagina\"","default":"Ho terminato questa pagina"},{"label":"Etichetta del pulsante schermo intero","default":"Schermo intero"},{"label":"Etichetta del pulsante di uscita da schermo intero","default":"Esci da schermo intero"},{"label":"Page progress in book","description":"\"@count\" sarà sostituito dal conteggio delle pagine e \"@total\" dal numero totale di pagine","default":"@count di @total pagine"},{"label":"Progresso dell\'interazione","description":"\"@count\" sarà sostituito dal conteggio delle pagine e \"@total\" dal numero totale di pagine","default":"@count @total interazioni"},{"label":"Traduzione per \"Invia report\"","default":"Invia report"},{"label":"Etichetta per il pulsante \"riavvia\"","default":"Riavvia"},{"label":"Intestazione del sommario","default":"Sommario"},{"label":"Traduzione per \"Tutte le interazioni\"","default":"Tutte le interazioni"},{"label":"Traduzione per \"Interazioni senza risposta\"","default":"Interazioni senza risposta"},{"label":"Punteggio","description":"\"@score\" sarà sostituito con il punteggio del momento e \"@maxscore\" con il massimo punteggio raggiungibile","default":"@score / @maxscore"},{"label":"Completamento di interazioni per pagina","description":"\"@left\" sarà sostituito con le interazioni restanti e \"@max\" con il numero totale di interazioni della pagina","default":"@left di @max interazioni completate"},{"label":"Traduzione per \"Nessuna interazione\"","default":"Nessuna interazione"},{"label":"Traduzione per \"Punteggio\"","default":"Punteggio"},{"label":"Etichetta per il pulsante \"Sommario & invio\"","default":"Sommario & invio"},{"label":"Traduzione per \"Non hai interagito con alcuna pagina\"","default":"Non hai interagito con alcuna pagina"},{"label":"Traduzione per \"Devi interagire con almeno una pagina prima di poter vedere il sommario\"","default":"Devi interagire con almeno una pagina prima di poter vedere il sommario"},{"label":"Traduzione per \"Le tue risposte sono state inviate per la verifica!\"","default":"Le tue risposte sono state inviate per la verifica!"},{"label":"Etichetta di progresso del sommario","default":"Avanzamento nel libro"},{"label":"Etichetta del progresso delle interazioni","default":"Progresso delle interazioni"},{"label":"Etichetta del punteggio totale","default":"Punteggio totale"},{"label":"Testi per l\'accessibilità","fields":[{"label":"Alternativa testuale per la progressione di pagina","description":"Un testo alternativo per la vista della progressione di pagina. @page e @total variabili disponibili","default":"Pagina @page di @total"},{"label":"Etichetta per espandere/ridurre il menu di navigazione","default":"Mostra/Nascondi il menu di navigazione"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // km.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'km',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Enable book cover","description":"A cover that shows info regarding the book before access"},{"label":"Cover Page","fields":[{"label":"Cover description","description":"This text will be the description of your book."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Pages","entity":"Page","widgets":[{"label":"Default"}],"field":{"label":"Item","fields":[{"label":"Page"}]}},{"label":"Behavioural settings","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Display table of contents as default","description":"When enabled the table of contents is showed when opening the book"},{"label":"Display Progress Indicators","description":"When enabled there will be indicators per page showing the user if he is done with the page or not."},{"label":"Enable automatic progress","description":"If enabled a page without tasks is considered done when viewed. A page with tasks when all tasks are done. If disabled there will be a button at the bottom of every page for the user to click when done with the page."},{"label":"Display summary","description":"When enabled the user can see a summary and submit the progress/answers"}]},{"label":"Translation for \"Read\"","default":"អាន"},{"label":"Translation for \"Display \'Table of contents\'\"","default":"បង្ហាញ «តារាងមាតិកា»"},{"label":"Translation for \"Hide \'Table of contents\'\"","default":"លាក់ «តារាងមាតិកា»"},{"label":"Translation for \"Next page\"","default":"ទំព័របន្ទាប់"},{"label":"Translation for \"Previous page\"","default":"ទំព័រមុន"},{"label":"Translation for \"Page completed!\"","default":"ទំព័របានបញ្ចប់!"},{"label":"Translation for \"@pages of @total completed\" (@pages and @total will be replaced by actual values)","default":"បានបញ្ចប់ @pages ទំព័រចំណោម @total ទំព័រ"},{"label":"Translation for \"Incomplete page\"","default":"ទំព័រមិនបានបញ្ចប់"},{"label":"Translation for \"Navigate to the top\"","default":"ផ្លាស់ទីទៅលើ"},{"label":"Translation for \"I have finished this page\"","default":"ខ្ញុំបានបញ្ចប់ទំព័រនេះ"},{"label":"Fullscreen button label","default":"ពេញអេក្រង់"},{"label":"Exit fullscreen button label","default":"បិទពេញអេក្រង់"},{"label":"Page progress in book","description":"\"@count\" will be replaced by page count, and \"@total\" with the total number of pages","default":"@count ចំណោម @total ទំព័រ"},{"label":"Interaction progress","description":"\"@count\" will be replaced by interaction count, and \"@total\" with the total number of interactions","default":"@count ចំណោម @total អន្តរកម្ម"},{"label":"Translation for \"Submit report\"","default":"ប្រគល់របាយការណ៍"},{"label":"Label for \"restart\" button","default":"ចាប់ផ្តើមឡើងវិញ"},{"label":"Summary header","default":"សង្ខេប"},{"label":"Translation for \"All interactions\"","default":"អន្តរកម្មទាំងអស់"},{"label":"Translation for \"Unanswered interactions\"","default":"អន្តរកម្មមិនទាន់បានឆ្លើយ"},{"label":"Score","description":"\"@score\" will be replaced with current score, and \"@maxscore\" will be replaced with max achievable score","default":"@score / @maxscore"},{"label":"Per page interactions completion","description":"\"@left\" will be replaced with remaining interactions, and \"@max\" will be replaced with total number of interactions on the page","default":"@left ចំណោម @max អន្តរកម្មបានបញ្ចប់"},{"label":"Translation for \"No interactions\"","default":"មិនមានអន្តរកម្ម"},{"label":"Translation for \"Score\"","default":"ពិន្ទុ"},{"label":"Label for \"Summary & submit\" button","default":"សងេ្ខប & ប្រគល់កិច្ចការ"},{"label":"Translation for \"You have not interacted with any pages.\"","default":"អ្នកមិនទាន់បានធ្វើអន្តរកម្មជាមួយទំព័រណាមួយនៅឡើយទេ។"},{"label":"Translation for \"You have to interact with at least one page before you can see the summary.\"","default":"អ្នកត្រូវតែមើលយ៉ាងហោចណាស់មួយទំព័រមុននឹងអ្នកអាចមើលសង្ខេបបាន។"},{"label":"Translation for \"Your answers are submitted for review!\"","default":"ចម្លើយរបស់អ្នកត្រូវបានប្រគល់ដើម្បីត្រួតពិនិត្យ!"},{"label":"Summary progress label","default":"វឌ្ឍនភាពសៀវភៅ"},{"label":"Interactions progress label","default":"វឌ្ឍនភាពអន្តរកម្ម"},{"label":"Total score label","default":"ពិន្ទុសរុប"},{"label":"Accessibility texts","fields":[{"label":"Page progress textual alternative","description":"An alternative text for the visual page progress. @page and @total variables available.","default":"ទំព័រ @page ចំណោម @total"},{"label":"Label for expanding/collapsing navigation menu","default":"បិទបើកម៉ឺនុយផ្លាស់ទី"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // ko.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'ko',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"책 표지 활성화","description":"접근 전 책에 대한 정보를 보여주는 표지"},{"label":"커버 페이지","fields":[{"label":"커버 설명","description":"이 텍스트는 당신의 책에 대한 설명이 될 겁니다."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"페이지","entity":"페이지","widgets":[{"label":"기본값"}],"field":{"label":"항목","fields":[{"label":"페이지"}]}},{"label":"동작 설정","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"목차를 기본값으로 표시","description":"활성화했을 때 책을 열 때 목차가 표시됨"},{"label":"학습 진도 표시","description":"활성화하면 사용자가 페이지별로 완료했는지 여부를 나타내는 진도가 표시됨."},{"label":"자동 학습 진도 표시 활성화","description":"활성화하면 과제없는 페이지는 페이지를 보았을 때 완료된 것으로 간주됨. 과제가 있는 경우 과제 완료시 페이지 완료 표시. 비활성화시 모든 페이지 하단에 사용자가 페이지 과제를 마쳤을 때 클릭할 수 있는 버튼이 있음."},{"label":"요약 표시","description":"활성화되면 요약 정보를 보고 학습진도/정답을 제출할 수 있음."}]},{"label":"\"Read\" (읽기)에 대한 맞춤형 텍스트","default":"읽기"},{"label":"\"Display \'Table of contents\'\" (목차 표시)에 대한 맞춤형 텍스트","default":"목차 표시"},{"label":"\"Hide \'Table of contents\'\" (목차 숨기기)에 대한 맞춤형 텍스트","default":"목차 숨기기"},{"label":"\"Next page\" (다음 페이지)에 대한 맞춤형 텍스트","default":"다음 페이지"},{"label":"\"Previous page\" (이전 페이지)에 대한 맞춤형 텍스트","default":"이전 페이지"},{"label":"\"Page completed!\" (페이지 완료)에 대한 맞춤형 텍스트","default":"페이지 완료!"},{"label":"\"@pages of @total completed\" 총 @total 중 @pages 완료 (@pages 와 @total 실제값으로 대체)에 대한 맞춤형 텍스트","default":"총 @total 중 @pages 완료"},{"label":"\"Incomplete page\" (페이지 미완료)에 대한 맞춤형 텍스트","default":"페이지 미완료"},{"label":"\"Navigate to the top\" (맨 위로 이동)에 대한 맞춤형 텍스트","default":"(맨 위로 이동)"},{"label":" \"I have finished this page\" (이 페이지 완료)에 대한 맞춤형 텍스트","default":"이 페이지를 완료했습니다."},{"label":"전체 화면 버튼 레이블","default":"전체화면"},{"label":"전체 화면 종료 버튼 레이블","default":"전체 화면 종료"},{"label":"책의 페이지 진행","description":"\"@count\"는 페이지 수로 대체되며, \"@total\"는 전체 페이지 수로 변경된다.","default":"총 @total 페이지 중 @count"},{"label":"상호작용 진행","description":"\"@count\"는 상호 작용 횟수로 대체되며, \"@total\"은 총 상호 작용 횟수로 대체된다.","default":" 총 @total 상호작용 중 @count"},{"label":"\"Submit report\" (보고서 제출)에 대한 맞춤형 텍스트","default":"보고서 제출"},{"label":"\"restart\" (재시작) 버튼","default":"재시작"},{"label":"요약 머릿말","default":"요약"},{"label":"\"All interactions\"(모든 상호작용)에 대한 맞춤형 텍스트","default":"모든 상호작용"},{"label":"\"Unanswered interactions\" (미답변 상호작용)에 대한 맞춤형 텍스트","default":"미답변 상호작용"},{"label":"점수","description":"\"@score\"는 현재 점수로 대체되고 \"@maxscore\" 는 달성 가능한 최대 점수로 대체됨.","default":"@score / @maxscore"},{"label":"페이지 단위 상호 작용 완료","description":"\"@left\"는 나머지 상호 작용으로 대체되며, \"@max\"는 페이지의 총 상호 작용 수로 대체된다","default":"총 @max 상호작용 남은 상호작용 @left"},{"label":"\"No interactions\"(상호작용 없음)에 대한 맞춤형 텍스트","default":"상호작용 없음"},{"label":"\"Score\"(점수)에 대한 맞춤형 텍스트","default":"점수"},{"label":"\"Summary & submit\" (요약 및 제출) 버튼","default":"요약 및 제출"},{"label":"\"You have not interacted with any pages.\" (상호작용이 없습니다)에 대한 맞춤형 텍스트","default":"상호작용이 없습니다."},{"label":"\"You have to interact with at least one page before you can see the summary.\" (요약보기에 앞서 적어도 한 페이지에서 상호작용 필수)에 대한 맞춤형 텍스트","default":"요약보기에 앞서 적어도 한 페이지에서 상호작용 필수"},{"label":"\"Your answers are submitted for review!\" (검토를 위해 답이 제출됨)에 대한 맞춤형 텍스트","default":"검토를 위해 답이 제출됨!"},{"label":"학습진도 요약 레이블","default":"책 진도"},{"label":"상호작용 진도 레이블","default":"상호작용 진도"},{"label":"전체 점수 레이블","default":"전체 점수"},{"label":"접근성 표시 텍스트","fields":[{"label":"페이지 진도 텍스트형으로 표시","description":"시각화 진도표시에 대한 대체 텍스트. @page 및 @total 변수 이용가능.","default":"총 @total 중 @page 페이지."},{"label":"네비게이션 메뉴 확장/축소 레이블","default":"네비게이션 메뉴 온 오프"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // lv.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'lv',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Iespējot grāmatas vāku","description":"Vāks, uz kura pirms piekļuves parādīta informācija par grāmatu"},{"label":"Titullapa","fields":[{"label":"Vāka apraksts","description":"Šis teksts būs jūsu grāmatas apraksts."},{"label":"Vāka multivide","description":"Neobligāta multivide ievadam."}]},{"label":"Lappuses","entity":"Lappuse","widgets":[{"label":"Pēc noklusējuma"}],"field":{"label":"Vienums","fields":[{"label":"Lappuse"}]}},{"label":"Uzvedības iestatītjumi","fields":[{"label":"Pamata krāsa","description":"Iestatiet pamatkrāsu, kas noteiks grāmatas kopējo krāsu shēmu. Lūdzu, nodrošiniet pietiekami augstu kontrastu.","default":"#1768c4"},{"label":"Pēc noklusējuma rādīt satura rādītāju","description":"Kad iespējots, atverot grāmatu, tiek parādīts satura rādītājs"},{"label":"Parādīt progresa indikatorus","description":"Kad iespējots, katrā lappusē būs indikatori, kas lietotājam rādīs, vai viņš lappusi ir pabeidzis."},{"label":"Iespējot automātisko progresu","description":"Ja iespējots, lappuse bez uzdevumiem tiek uzskatīta par pabeigtu, kad tiek skatīta. Lappuse ar uzdevumiem - kad visi uzdevumi ir paveikti. Ja atspējots, katras lapas apakšā būs poga, uz kuras lietotājs var noklikšķināt, kad būs pabeidzis lappusi."},{"label":"Parādīt kopsavilkumu","description":"Kad iespējots, lietotājs var redzēt kopsavilkumu un iesniegt progresu/atbildes"}]},{"label":"\"Lasīt\" tulkojums","default":"Lasīt"},{"label":"\"Parādīt \'Satura rādītāju\'\" tulkojums","default":"Parādīt \'Satura rādītāju\'"},{"label":"\"Paslēpt \'Satura rādītāju\'\" tulkojums","default":"Paslēpt \'Satura rādītāju\'"},{"label":"\"Nākamā lappuse\" tulkojums","default":"Nākamā lappuse"},{"label":"\"Iepriekšējā lappuse\" tulkojums","default":"Iepriekšējā lappuse"},{"label":"\"Lappuse pabeigta!\" tulkojums","default":"Lappuse pabeigta!"},{"label":"\"@pages no @total pabeigtas\" tulkojums (@pages un @total tiks aizstātas ar faktiskajām vērtībām)","default":"@pages no @total pabeigtas"},{"label":"\"Nepabeigta lapa\" tulkojums","default":"Nepabeigta lapa"},{"label":"\"Pāriet uz augšu\" tulkojums","default":"Pāriet uz augšu"},{"label":"\"Esmu pabeidzis šo lappusi\" tulkojums","default":"Esmu pabeidzis šo lappusi"},{"label":"Pilnekrāna pogas etiķete","default":"Pilnekrāna režīms"},{"label":"Etiķete pogai iziešanai no pilnekrāna režīma","default":"Iziet no pilnekrāna režīma"},{"label":"Lappušu progress grāmatā","description":"\"@count\" tiks aizstāts ar lappušu skaitu un \"@total\" ar kopējo lappušu skaitu","default":"@count no @total lappusēm"},{"label":"Mijiedarbību progress","description":"\"@count\" tiks aizstāts ar mijiedarbību skaitu un \"@total\" ar kopējo mijiedarbību skaitu","default":"@count no @total mijiedarbībām"},{"label":"\"Iesniegt ziņojumu\" tulkojums","default":"Iesniegt ziņojumu"},{"label":"Pogas \"Atsākt\" etiķete","default":"Atsākt"},{"label":"Kopsavilkuma galvene","default":"Kopsavilkums"},{"label":"\"Visas mijiedarbības\" tulkojums","default":"Visas mijiedarbības"},{"label":"\"Neatbildētās mijiedarbības\" tulkojums","default":"Neatbildētas mijiedarbības"},{"label":"Rezultāts","description":"\"@score\" tiks aizstāts ar pašreizējo rezultātu, un \"@maxscore\" tiks aizstāts ar maksimālo sasniedzamo punktu skaitu","default":"@score no @maxscore"},{"label":"Lappuses mijiedarbību pabeigšana","description":"\"@left\" tiks aizstāts ar atlikušajām mijiedarbībām, un \"@max\" tiks aizstāts ar kopējo mijiedarbību skaitu lappusē","default":"@left no @max mijiedarbībām pabeigtas"},{"label":"\"Nav mijiedarbību\" tulkojums","default":"Nav mijiedarbību"},{"label":"\"Rezultāts\" tulkojums","default":"Rezultāts"},{"label":"Pogas \"Kopsavilkums un iesniegšana\" etiķete","default":"Kopsavilkums un iesniegšana"},{"label":"\"Jūs neesat mijiedarbojies ar nevienu lappusi.\" tulkojums","default":"Jūs neesat mijiedarbojies ar nevienu lappusi."},{"label":"\"Nepieciešama mijiedarbība ar vismaz vienu lappusi, lai redzētu kopsavilkumu.\" tulkojums","default":"Nepieciešama mijiedarbība ar vismaz vienu lappusi, lai redzētu kopsavilkumu."},{"label":"\"Jūsu atbildes ir iesniegtas pārskatīšanai!\" tulkojums","default":"Jūsu atbildes ir iesniegtas pārskatīšanai!"},{"label":"Kopsavilkuma progresa etiķete","default":"Grāmatas progress"},{"label":"Mijiedarbību progresa etiķete","default":"Mijiedarbību progress"},{"label":"Kopējā rezultāta etiķete","default":"Kopējais rezultāts"},{"label":"Pieejamības teksti","fields":[{"label":"Lappuses progresa teksta alternatīva","description":"Alternatīvs teksts vizuālajam lappuses progresam. Pieejami mainīgie @page un @total.","default":"Lappuse @page no @total."},{"label":"Etiķete navigācijas izvēlnes izvēršanai/sakļaušanai","default":"Pārslēgt navigācijas izvēlni"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // mn.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'mn',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Номын хавтасыг идэвхжүүлэх","description":"Хандахаас өмнө номын талаарх мэдээллийг харуулсан хавтас"},{"label":"Нүүр хуудас","fields":[{"label":"Хавтасны тайлбар","description":"Энэхүү текст нь номын тайлбар хэсэгт харагдах болно."},{"label":"Дунд зэргийн хамрах","description":"Танилцуулгын нэмэлт хэрэгсэл."}]},{"label":"Хуудсууд","entity":"Хуудас","widgets":[{"label":"Үндсэн сонголт"}],"field":{"label":"Хэсэг","fields":[{"label":"Хуудас"}]}},{"label":"Тохиргоо","fields":[{"label":"Үндсэн өнгө","description":"Номын ерөнхий өнгөний схемийг тодорхойлох үндсэн өнгийг тохируулна уу. Хангалттай өндөр тодосгогчийг баталгаажуулна уу.","default":"#1768c4"},{"label":"Агуулгыг үндсэн тохиргоогоор харуулах","description":"Идэвхжүүлсэнээр агуулгын хүснэгт номыг нээх үед харагдана"},{"label":"Явцын Үзүүлэлтүүдийг Харуулах","description":"Идэвхижүүлснээр хэрэглэгч ажилласан эсэхийг хуудас бүрт харуулна."},{"label":"Автомат явцыг идэвхжүүлэх","description":"Хэрэв идэвхжүүлсэн бол дасгал ажилгүй хуудсыг үзэхэд дууссан гэж тооцно. Дасгал даалгавартай хуудсын хувьд дасгалыг гүйцэтгэж байж дууссан гэж тооцно. Энэхүү тохиргоог идэвхжүүлээгүй тохиолдолд хуудас бүрийн доор хэрэглэгч дуусан гэж өөрөө тэмдэглэнэ."},{"label":"Үр дүнг харуулах","description":"Идэвхжүүлсэн үед хэрэглэгч үр дүнг харж/илгээх боломжтой болно"}]},{"label":"\"Унших\"-ыг орчуулах","default":"Унших"},{"label":"\'\"Агуулга\"-ыг харуулах\'-ын орчуулга","default":"\"Агуулга\"-ыг харуулах"},{"label":"\"\'Агуулга\'-ыг нуух\"-ын орчуулга","default":"\'Агуулга\'-ыг нуух"},{"label":"\"Дараагийн хуудас\"-ын орчуулга","default":"Дараагийн хуудас"},{"label":"\"Өмнөх хуудас\"-ыг орчуулах","default":"Өмнөх хуудас"},{"label":"\"Хуудсыг дуусгалаа!\"-ын орчуулга","default":"Хуудсыг дуусгалаа!"},{"label":"Орчуулга \"@total ээс @pages уншсан гүйцэтгэлээ\" (@pages ба @total нь бодит тоон утгаар солигдоно)","default":"@total ээс @pages гүйцэтгэлээ"},{"label":"\"Гүйцэтгээгүй хуудас\"-ын орчуулга","default":"Гүйцэтгээгүй хуудас"},{"label":"\"Дээшээ буцах\"-ын орчуулга","default":"Дээшээ буцах"},{"label":"\"Энэ хуудсыг дуусгасан\"-ын орчуулга","default":"Энэ хуудсыг дуусгасан"},{"label":"Бүтэн дэлгэц товчлуурын нэр","default":"Бүтэн дэлгэц"},{"label":"Бүтэн дэлгэцийн нэрээс гарах","default":"Бүтэн дэлгэцийг болиулах"},{"label":"Номны гүйцэтгэлийн явц","description":"\"@count\" нь хуудасны тоогоор, \"@total\"нь нийт хуудасны тоогоор солигдоно","default":"@total ээс @count хуудас"},{"label":"Идэвхи оролцооны явц","description":"\"@count\" нь ажилласан интеракшионы тоогоор, \"@total\" нь нийлбэр интеракшионы тоогоор солигдоно","default":"@total ээс @count интеракшион"},{"label":"\"Тайланг илгээх\"-ийн орчуулга","default":"Тайланг илгээх"},{"label":"Товчлуурын нэр \"дахин эхлүүлэх\"","default":"Дахин эхлүүлэх"},{"label":"Тоймын гарчиг","default":"Үр дүнгийн тойм"},{"label":"\"Нийт интеракшион\"-ын орчуулга","default":"Нийт интеракшион"},{"label":"\"Хариулаагүй асуултууд\" -ын орчуулга","default":"Хариулаагүй асуултууд"},{"label":"Оноо","description":"\"@score\" нь одоогийн оноогоор, \"@maxscore\" нь хамгийн дээд оноогоор солигдоно","default":"@score / @maxscore авсан"},{"label":"Нэг хуудсанд оногдох интеракшион","description":"\"@left\" нь хуудасны үлдсэн асуултуудаар, \"@max\" нь хуудасны нийт асуултуудын тоогоор солигдоно","default":"@max аас @left асуултад хариулсан"},{"label":"\"Хариулаагүй\"-ын орчуулга","default":"Хариулаагүй"},{"label":"\"Оноо\"-ны орчуулга","default":"Оноо"},{"label":"\"Үр дүн илгээх\" товчлуурын нэр","default":"Үр дүн илгээх"},{"label":"\"Та аль ч хуудсны асуултад хариулаагүй байна.\"-ын орчуулга","default":"Та аль ч хуудсны асуултад хариулаагүй байна."},{"label":"\"Та үр дүнг харахын тулд дор хаяж нэг хуудасны асуултад хариулах ёстой.\"-ын орчуулга","default":"Та үр дүнг харахын тулд дор хаяж нэг хуудасны асуултад хариулах ёстой."},{"label":"\"Таны дүнг хянуулахаар илгээсэн!\"-ын орчуулга","default":"Таны дүнг хянуулахаар илгээсэн!"},{"label":"Үр дүнгийн явцын нэр","default":"Номны явц"},{"label":"Хариултын явцын нэр","default":"Хариултын явц"},{"label":"Нийт онооны нэр","default":"Нийт оноо"},{"label":"Нэмэлт текстүүд","fields":[{"label":"Хуудасны явц текстээр","description":"Хуудасны явцыг харуулахад шаардлагатай нэмэлт текст. @page ба @total хувьсагчид ашиглах боломжтой.","default":"Хуудас @total ээс @page."},{"label":"Навигацийн менюг дэлгэх/хураах-ийн нэр","default":"Навигацийн менюг шилжүүлэх"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // nb.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'nb',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Enable book cover","description":"A cover that shows info regarding the book before access"},{"label":"Cover Page","fields":[{"label":"Cover description","description":"This text will be the description of your book."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Pages","entity":"Page","widgets":[{"label":"Default"}],"field":{"label":"Item","fields":[{"label":"Page"}]}},{"label":"Behavioural settings","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Display table of contents as default","description":"When enabled the table of contents is showed when opening the book"},{"label":"Display Progress Indicators","description":"When enabled there will be indicators per page showing the user if he is done with the page or not."},{"label":"Enable automatic progress","description":"If enabled a page without tasks is considered done when viewed. A page with tasks when all tasks are done. If disabled there will be a button at the bottom of every page for the user to click when done with the page."},{"label":"Vis sammendrag","description":"When enabled the user can see a summary and submit the progress/answers"}]},{"label":"Translation for \"Read\"","default":"Read"},{"label":"Translation for \"Display \'Table of contents\'\"","default":"Display \'Table of contents\'"},{"label":"Translation for \"Hide \'Table of contents\'\"","default":"Hide \'Table of contents\'"},{"label":"Translation for \"Next page\"","default":"Neste side"},{"label":"Translation for \"Previous page\"","default":"Forrige side"},{"label":"Translation for \"Page completed!\"","default":"Kapittel ferdig!"},{"label":"Translation for \"@pages of @total completed\" (@pages and @total will be replaced by actual values)","default":"@pages of @total completed"},{"label":"Translation for \"Incomplete page\"","default":"Ikke fullført kapittel"},{"label":"Translation for \"Navigate to the top\"","default":"Gå til toppen"},{"label":"Translation for \"I have finished this page\"","default":"Jeg er ferdig med siden"},{"label":"Fullscreen button label","default":"Fullskjerm"},{"label":"Exit fullscreen button label","default":"Lukk fullskjerm"},{"label":"Page progress in book","description":"\"@count\" will be replaced by page count, and \"@total\" with the total number of pages","default":"@count of @total pages"},{"label":"Interaction progress","description":"\"@count\" will be replaced by interaction count, and \"@total\" with the total number of interactions","default":"@count av @total oppgaver"},{"label":"Oversettelse for \"Levér rapport\"","default":"Levér rapport"},{"label":"Label for \"restart\" button","default":"Restart"},{"label":"Summary header","default":"Summary"},{"label":"Translation for \"All interactions\"","default":"All interactions"},{"label":"Translation for \"Unanswered interactions\"","default":"Unanswered interactions"},{"label":"Score","description":"\"@score\" will be replaced with current score, and \"@maxscore\" will be replaced with max achievable score","default":"@score / @maxscore"},{"label":"Per page interactions completion","description":"\"@left\" will be replaced with remaining interactions, and \"@max\" will be replaced with total number of interactions on the page","default":"@left of @max interactions completed"},{"label":"Translation for \"No interactions\"","default":"No interactions"},{"label":"Translation for \"Score\"","default":"Score"},{"label":"Label for \"Summary & submit\" button","default":"Summary & submit"},{"label":"Translation for \"You have not interacted with any pages.\"","default":"You have not interacted with any pages."},{"label":"Translation for \"You have to interact with at least one page before you can see the summary.\"","default":"You have to interact with at least one page before you can see the summary."},{"label":"Translation for \"Your answers are submitted for review!\"","default":"Your answers are submitted for review!"},{"label":"Summary progress label","default":"Book progress"},{"label":"Interactions progress label","default":"Interactions progress"},{"label":"Total score label","default":"Total score"},{"label":"Accessibility texts","fields":[{"label":"Page progress textual alternative","description":"An alternative text for the visual page progress. @page and @total variables available.","default":"Page @page of @total."},{"label":"Label for expanding/collapsing navigation menu","default":"Toggle navigation menu"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // nl.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'nl',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Schakel boekomslag in","description":"Een omslag die informatie over het boek toont voor toegang"},{"label":"Omslagpagina","fields":[{"label":"Omslagbeschrijving","description":"Deze tekst wordt de beschrijving van je boek."},{"label":"Kaft medium","description":"Optioneel medium voor de introductie."}]},{"label":"Pagina\'s","entity":"Pagina","widgets":[{"label":"Standaard"}],"field":{"label":"Item","fields":[{"label":"Pagina"}]}},{"label":"Gedragsinstellingen","fields":[{"label":"Basiskleur","description":"Stel de basiskleur in die het kleurenschema van het boek bepaalt. Let er op dat je voor een hoog contrast kiest.","default":"#1768c4"},{"label":"Toon standaard de inhoudsopgave","description":"Indien ingeschakeld, wordt de inhoudsopgave getoond als het boek wordt geopend"},{"label":"Toon voortgangsindicatoren","description":"Indien ingeschakeld, worden er per pagina indicatoren getoond die de gebruiker tonen hoe ver hij op de pagina gevorderd is."},{"label":"Schakel automatische voortgang in","description":"Indien ingeschakeld, wordt een pagina zonder taken als voltooid beschouwd wanneer die is bekeken, een pagina met taken als die klaar zijn. Indien uitgeschakeld, wordt er een knop getoond op elke pagina waarop de gebruiker kan klikken als hij klaar is met de pagina."},{"label":"Toon samenvatting","description":"Indien ingeschakeld, kan de gebruiker een samenvatting zien en de voortgang/antwoorden inzenden"}]},{"label":"Vertaling voor \"Lezen\"","default":"Lezen"},{"label":"Vertaling voor \"Toon \'Inhoudsopgave\'\"","default":"Toon \'Inhoudsopgave\'"},{"label":"Vertaling voor \"Verberg \'Inhoudsopgave\'\"","default":"Verberg \'Inhoudsopgave\'"},{"label":"Vertaling voor \"Volgende pagina\"","default":"Volgende pagina"},{"label":"Vertaling voor \"Vorige pagina\"","default":"Vorige pagina"},{"label":"Vertaling voor \"Pagina voltooid!\"","default":"Pagina voltooid!"},{"label":"Vertaling voor \"@pages van @total voltooid\" (@pages en @total worden vervangen door werkelijke waardes)","default":"@pages van @total voltooid"},{"label":"Vertaling voor \"Onvoltooide pagina\"","default":"Onvoltooide pagina"},{"label":"Vertaling voor \"Navigeer naar boven\"","default":"Navigeer naar boven"},{"label":"Vertaling voor \"Ik heb deze pagina voltooid\"","default":"Ik heb deze pagina voltooid"},{"label":"Label van \"Volledig scherm\"-knop","default":"Volledig scherm"},{"label":"Label van \"Volledig scherm afsluiten\"-knop","default":"Volledig scherm afsluiten"},{"label":"Paginavoortgang in boek","description":"\"@count\" wordt vervangen door paginatelling, en \"@total\" door het totaal aantal pagina\'s","default":"@count van @total pagina\'s"},{"label":"Interactie voortgang","description":"\"@count\" wordt vervangen door interactietelling, en \"@total\" door het totaal aantal interacties","default":"@count van @total interacties"},{"label":"Vertaling voor \"Rapport verzenden\"","default":"Rapport verzenden"},{"label":"Label voor \"Opnieuw starten\"-knop","default":"Opnieuw starten"},{"label":"Titel van samenvatting","default":"Samenvatting"},{"label":"Vertaling voor \"Alle interacties\"","default":"Alle interacties"},{"label":"Vertaling voor \"Niet-beantwoorde interacties\"","default":"Niet-beantwoorde interacties"},{"label":"Score","description":"\"@score\" wordt vervangen door huidige score, en \"@maxscore\" wordt vervangen door max. haalbare score","default":"@score / @maxscore"},{"label":"Voltooiing van interacties per pagina","description":"\"@left\" wordt vervangen door resterende interacties, en \"@max\" wordt vervangen door het totaal aantal interacties op de pagina","default":"@left van @max interacties afgerond"},{"label":"Vertaling voor \"Geen interacties\"","default":"Geen interacties"},{"label":"Vertaling voor \"Score\"","default":"Score"},{"label":"Label voor \"Samenvatting & verzenden\"-knop","default":"Samenvatting & verzenden"},{"label":"Vertaling voor \"Er zijn geen interacties met pagina\'s.\"","default":"Er zijn geen interacties met pagina\'s."},{"label":"Vertaling voor \"Je moet tenminste één interactie hebben voltooid om de samenvatting te kunnen zien.\"","default":"Je moet tenminste één interactie hebben voltooid om de samenvatting te kunnen zien."},{"label":"Vertaling voor \"Je antwoorden zijn verzonden voor beoordeling!\"","default":"Je antwoorden zijn verzonden voor beoordeling!"},{"label":"Label voor voortgang in samenvatting","default":"Boekvoortgang"},{"label":"Label voor voortgang bij interacties","default":"Interactievoortgang"},{"label":"Label voor totaalscore","default":"Totaalscore"},{"label":"Toegankelijkheidsteksten","fields":[{"label":"Alternatieve tekst voor paginavoortgang","description":"Een alternatieve tekst voor de visuele paginavoortgang. @page en @total variabelen beschikbaar.","default":"Pagina @page van @total."},{"label":"Label voor uitvouwen/invouwen navigatiemenu","default":"Uit-/invouwen navigatiemenu"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // nn.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'nn',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Enable book cover","description":"A cover that shows info regarding the book before access"},{"label":"Cover Page","fields":[{"label":"Cover description","description":"This text will be the description of your book."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Pages","entity":"Page","widgets":[{"label":"Default"}],"field":{"label":"Item","fields":[{"label":"Page"}]}},{"label":"Behavioural settings","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Display table of contents as default","description":"When enabled the table of contents is showed when opening the book"},{"label":"Display Progress Indicators","description":"When enabled there will be indicators per page showing the user if he is done with the page or not."},{"label":"Enable automatic progress","description":"If enabled a page without tasks is considered done when viewed. A page with tasks when all tasks are done. If disabled there will be a button at the bottom of every page for the user to click when done with the page."},{"label":"Display summary","description":"When enabled the user can see a summary and submit the progress/answers"}]},{"label":"Translation for \"Read\"","default":"Les"},{"label":"Translation for \"Display \'Table of contents\'\"","default":"Vis \'Table of contents\'"},{"label":"Translation for \"Hide \'Table of contents\'\"","default":"Skjul \'Table of contents\'"},{"label":"Translation for \"Next page\"","default":"Neste side"},{"label":"Translation for \"Previous page\"","default":"Førre side"},{"label":"Translation for \"Page completed!\"","default":"Kapittel ferdig!"},{"label":"Translation for \"@pages of @total completed\" (@pages and @total will be replaced by actual values)","default":"@pages av @total fullført"},{"label":"Translation for \"Incomplete page\"","default":"Ikkje fullført kapittel"},{"label":"Translation for \"Navigate to the top\"","default":"Gå til toppen"},{"label":"Translation for \"I have finished this page\"","default":"Eg er ferdig med sida"},{"label":"Fullscreen button label","default":"Fullskjerm"},{"label":"Exit fullscreen button label","default":"Lukk fullskjerm"},{"label":"Page progress in book","description":"\"@count\" will be replaced by page count, and \"@total\" with the total number of pages","default":"@count of @total pages"},{"label":"Interaction progress","description":"\"@count\" will be replaced by interaction count, and \"@total\" with the total number of interactions","default":"@count of @total interactions"},{"label":"Translation for \"Submit report\"","default":"Submit Report"},{"label":"Label for \"restart\" button","default":"Restart"},{"label":"Summary header","default":"Summary"},{"label":"Translation for \"All interactions\"","default":"All interactions"},{"label":"Translation for \"Unanswered interactions\"","default":"Unanswered interactions"},{"label":"Score","description":"\"@score\" will be replaced with current score, and \"@maxscore\" will be replaced with max achievable score","default":"@score / @maxscore"},{"label":"Per page interactions completion","description":"\"@left\" will be replaced with remaining interactions, and \"@max\" will be replaced with total number of interactions on the page","default":"@left of @max interactions completed"},{"label":"Translation for \"No interactions\"","default":"No interactions"},{"label":"Translation for \"Score\"","default":"Score"},{"label":"Label for \"Summary & submit\" button","default":"Summary & submit"},{"label":"Translation for \"You have not interacted with any pages.\"","default":"You have not interacted with any pages."},{"label":"Translation for \"You have to interact with at least one page before you can see the summary.\"","default":"You have to interact with at least one page before you can see the summary."},{"label":"Translation for \"Your answers are submitted for review!\"","default":"Your answers are submitted for review!"},{"label":"Summary progress label","default":"Book progress"},{"label":"Interactions progress label","default":"Interactions progress"},{"label":"Total score label","default":"Total score"},{"label":"Accessibility texts","fields":[{"label":"Page progress textual alternative","description":"An alternative text for the visual page progress. @page and @total variables available.","default":"Side @page av @total."},{"label":"Label for expanding/collapsing navigation menu","default":"Slå på navigasjonsmeny"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // pt-br.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'pt-br',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Ativar página de Capa do Livro","description":"Ativar capa que mostra informações sobre o livro antes do acesso"},{"label":"Página de Capa","fields":[{"label":"Descrição da capa","description":"Texto que será exibido como descrição do livro."},{"label":"Capa média","description":"Mídia opcional para a introdução."}]},{"label":"Capítulos","entity":"Capítulo","widgets":[{"label":"Padrão"}],"field":{"label":"Item","fields":[{"label":"Capítulo"}]}},{"label":"Configurações comportamentais","fields":[{"label":"Cor base","description":"Defina a cor base que definirá o esquema geral de cores do livro. Certifique-se de um contraste alto o suficiente.","default":"#1768c4"},{"label":"Exibir Estrutura de Tópicos como padrão","description":"Quando ativado, a Estrutura de Tópicos é mostrada ao abrir o livro"},{"label":"Exibir Indicador de Progresso","description":"Exibe indicadores por página mostrando o que o usuário já concluiu e o que está pendente."},{"label":"Ativar progresso automático","description":"Se ativado, as páginas sem atividades são marcadas como concluídas quando são visualizadas, enquanto as páginas com atividades são marcadas apenas quando o usuário envia todas as atividades. Se desativado, exibe um botão no rodapé das páginas para o usuário indicar os conteúdos concluídos."},{"label":"Mostrar resumo","description":"Quando ativado, o usuário pode ver um resumo e enviar os progressos/respostas"}]},{"label":"Tradução para \"Ler\"","default":"Ler"},{"label":"Tradução para \"Mostrar \'Estrutura de Tópicos\'\"","default":"Mostrar \'Tabela de conteúdos\'"},{"label":"Tradução para \"Ocultar \'Estrutura de Tópicos\'\"","default":"Ocultar \'Tabela de conteúdos\'"},{"label":"Tradução para \"Próxima página\"","default":"Próxima página"},{"label":"Tradução para \"Página anterior\"","default":"Página anterior"},{"label":"Tradução para \"Aula concluída!\"","default":"Aula concluída!"},{"label":"Tradução para \"@pages de @total concluídas\" (@pages e @total serão substituídas pelos valores atuais para o usuário)","default":"@pages de @total concluídas"},{"label":"Tradução para \"Aula incompleta\"","default":"Aula incompleta"},{"label":"Tradução para \"Retornar ao topo\"","default":"Retornar ao topo"},{"label":"Tradução para \"Eu concluí o estudo desta aula\"","default":"Eu concluí o estudo desta aula"},{"label":"Texto do botão Tela Cheia","default":"Tela Cheia"},{"label":"Texto do botão Sair da Tela Cheia","default":"Sair da Tela Cheia"},{"label":"Progresso das aulas no livro","description":"\"@count\" será substituído pela contagem de páginas, e \"@total\" pelo número total de páginas","default":"@count de @total páginas"},{"label":"Progresso das interações","description":"\"@count\" será substituído pela contagem de interações, e \"@total\" pelo número total de interações","default":"@count de @total interações"},{"label":"Tradução para \"Enviar relatório\"","default":"Enviar Relatório"},{"label":"Rótulo para o botão \"redefinir\"","default":"Reiniciar"},{"label":"Cabeçalho do resumo","default":"Resumo"},{"label":"Tradução para \"Todas as interações\"","default":"Todas as interações"},{"label":"Tradução para \"Interações não respondidas\"","default":"Interações não respondidas"},{"label":"Pontuação","description":"\"@score\" será substituído pela pontuação atual, e \"@maxscore\" será substituído pela pontuação máxima possível","default":"@score/@maxscore"},{"label":"Conclusão de interações por página","description":"\"@left\" será substituído por interações remanescentes, e \"@max\" será substituído por um número total de interações na página","default":"@left de @max interações concluídas"},{"label":"Tradução para \"Sem interações\"","default":"Sem interações"},{"label":"Tradução para \"Pontuação\"","default":"Pontuação"},{"label":"Rótulo para o botão \"Resumo & Enviar\"","default":"Resumo & enviar"},{"label":"Tradução para \"Você não interagiu com nenhuma página.\"","default":"Você não interagiu com nenhuma página."},{"label":"Tradução para \"Você tem que interagir com pelo menos uma página antes de poder ver o resumo.\"","default":"Você tem que interagir com pelo menos uma página antes de poder ver o resumo."},{"label":"Tradução para \"Suas respostas serão submetidas para revisão!\"","default":"Suas respostas serão submetidas para revisão!"},{"label":"Rótulo de Resumo do Progresso","default":"Progresso do livro"},{"label":"Rótulo de progresso das interações","default":"progresso das interações"},{"label":"Rótulo da pontuação total","default":"Pontuação total"},{"label":"Textos de acessibilidade","fields":[{"label":"Texto alternativo para progresso da aula","description":"Texto alternativo para indicação visual de progresse da aula. Varíaveis @page e @total disponíveis.","default":"Página @page de @total."},{"label":"Texto para expandir/contrair o menu de navegação","default":"Exibir/Ocultar menu de navegação"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // ru.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'ru',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Добавить обложку книги","description":"Обложка, которая показывается перед открыванием книги"},{"label":"Обложка","fields":[{"label":"Название книги","description":"Этот текст содержит описание книги."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Страницы","entity":"Страница","widgets":[{"label":"По умолчанию"}],"field":{"label":"Элемент","fields":[{"label":"Страница"}]}},{"label":"Настройки поведения","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Показывать содержание по умолчанию","description":"Если включено, содержание показывается сразу после октрывания книги"},{"label":"Показывать индикатор выполнения","description":"Если включено, на каждой странице показывается индикатор выполнения заданий."},{"label":"Автоподтверждение выполнения","description":"Если включено, то страница без заданий отмечается пройденной сразу после просмотра, а страница с заданиями - после из выполнения. Если выключено - требуется подтверждать выполнение кнопкой внизу каждой страницы."},{"label":"Показывать страницу Итоги","description":"Если включено, добавляется страница с результатами прохождения и кнопкой их отправки"}]},{"label":"Перевод для \"Читать\"","default":"Читать"},{"label":"Перевод для \"Показать содержание\"","default":"Показать содержание"},{"label":"Перевод для \"Скрыть содержание\"","default":"Скрыть содержание"},{"label":"Перевод для \"Следующая страница\"","default":"Следующая страница"},{"label":"Перевод для \"Предыдущая страница\"","default":"Предыдущая страница"},{"label":"Перевод для \"Задания выполнены!\"","default":"Задания выполнены!"},{"label":"Перевод для \"@pages из @total выполнено\" (@pages и @total заменятся на текущие значения)","default":"@pages из @total выполнено"},{"label":"Перевод для \"Incomplete page\"","default":"Incomplete page"},{"label":"Перевод для \"К началу страницы\"","default":"К началу страницы"},{"label":"Перевод для \"Я выполнил задания этой страницы\"","default":"Я выполнил задания этой страницы"},{"label":"Кнопка Развернуть на весь экран","default":"Развернуть на весь экран"},{"label":"Кнопка Выйти из полноэкранного режима","default":"Выйти из полноэкранного режима"},{"label":"Номер открытой страницы","description":"\"@count\" заменится на номер открытой страницы, а \"@total\" - на общее количество страниц","default":"Страница @count из @total"},{"label":"Счетчик просмотренных заданий","description":"\"@count\" заменится на счетчик просмотренных заданий, а \"@total\" - на их общее число","default":"@count из @total просмотрено"},{"label":"Перевод для \"Итоги\"","default":"Итоги"},{"label":"Надпись на кнопке \"Перепройти\"","default":"Перепройти"},{"label":"Заголовок страницы Итоги курса","default":"Итоги курса"},{"label":"Перевод для \"Всего заданий просмотрено\"","default":"Всего заданий просмотрено"},{"label":"Перевод для \"Невыполненные задания\"","default":"Невыполненные задания"},{"label":"Баллы","description":"\"@score\" заменится на уже набранные баллы, \"@maxscore\" - на максимально возможное их количество","default":"@score / @maxscore"},{"label":"Осталось пройти на странице","description":"\"@left\" заменится на число непросмотренных заданий текущей страницы, а \"@max\" - на их общее количество","default":"Осталось на странице @left из @max"},{"label":"Перевод для \"Заданий нет\"","default":"Заданий нет"},{"label":"Перевод для \"Баллы\"","default":"Баллы"},{"label":"Надпись на кнопке \"Отправить ответы\"","default":"Отправить ответы"},{"label":"Перевод для \"Вы не завершили ни одной страницы.\"","default":"Вы не завершили ни одной страницы."},{"label":"Перевод для \"Для показа Итогов требуется завершить хотя бы одну страницу.\"","default":"Для показа Итогов требуется завершить хотя бы одну страницу."},{"label":"Перевод для \"Ваши ответы отправлены!\"","default":"Ваши ответы отправлены!"},{"label":"Заголовок Страниц просмотрено","default":"Страниц просмотрено"},{"label":"Заголовок Заданий просмотрено","default":"Заданий просмотрено"},{"label":"Заголовок Набрано баллов","default":"Набрано баллов"},{"label":"Accessibility texts","fields":[{"label":"Page progress textual alternative","description":"An alternative text for the visual page progress. @page and @total variables available.","default":"Page @page of @total."},{"label":"Label for expanding/collapsing navigation menu","default":"Toggle navigation menu"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // sl.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'sl',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Omogoči naslovno stran","description":"Na strani udeleženci že pred vstopom preberejo informacije o knjigi."},{"label":"Naslovna stran","fields":[{"label":"Opis naslovne strani","description":"Besedilo opisuje vsebino knjige."},{"label":"Medij naslovne strani","description":"Neobvezen medij za dodaten opis vsebine knjige."}]},{"label":"Strani","entity":"Stran","widgets":[{"label":"Privzeto"}],"field":{"label":"Element","fields":[{"label":"Stran"}]}},{"label":"Nastavitve interakcije","fields":[{"label":"Osnovna barva","description":"Določitev osnovne barve za celotno barvno shemo knjige. Zagotovite dovolj visok kontrast.","default":"#006a8e"},{"label":"Kazalo vsebin prikaži privzeto","description":"Omogočena nastavitev kazalo vsebin prikaže ob odprtju knjige."},{"label":"Prikaži indikatorje napredovanja","description":"Indikatorji udeležencu sporočijo status ogleda/zaključenosti posamezne strani."},{"label":"Omogoči samodejno beleženje napredovanja","description":"Brez samodejnega beleženja napredovanja, morajo udeleženci napredovanje potrditi s pomočjo potrditvenega polja."},{"label":"Prikaži stran s povzetkom","description":"Udeležencem se na dodatni strani prikaže povzetek interakcij oz. napredovanja."}]},{"label":"Besedilo za \"Preberi\"","default":"Preberi"},{"label":"Besedilo za \"Prikaži \'kazalo vsebine\'\"","default":"Prikaži \'kazalo vsebine\'"},{"label":"Besedilo za \"Skrij \'kazalo vsebine\'\"","default":"Skrij \'kazalo vsebine\'"},{"label":"Besedilo za \"Naslednja stran\"","default":"Naslednja stran"},{"label":"Besedilo za \"Prejšnja stran\"","default":"Prejšnja stran"},{"label":"Besedilo za \"Stran zaključena!\"","default":"Stran zaključena!"},{"label":"Besedilo za \"Zaključeno @pages od @total\". @pages in @total sta spremenljivki.","default":"Zaključeno @pages od @total"},{"label":"Besedilo za \"Nezaključena stran\"","default":"Nezaključena stran"},{"label":"Besedilo za \"Na vrh\"","default":"Na vrh"},{"label":"Besedilo za \"Stran zaključena\"","default":"Stran zaključena"},{"label":"Besedilo za celozaslonski način","default":"Celozaslonski način"},{"label":"Besedilo za zaključek celozaslonskega načina","default":"Zapusti celozaslonski način"},{"label":"Napredek ogleda strani v knjigi","description":"\"@count\" in \"@total\" sta spremenljivki.","default":"Strani: @count od @total"},{"label":"Napredek interakcij v knjigi","description":"\"@count\" in \"@total\" sta spremenljivki.","default":"Interakcije: @count od @total"},{"label":"Besedilo za \"Oddaj poročilo\"","default":"Oddaj poročilo"},{"label":"Besedilo za gumb \"Poskusi ponovno\"","default":"Poskusi ponovno"},{"label":"Naslov strani s povzetkom","default":"Povzetek"},{"label":"Besedilo za \"Vse interakcije\"","default":"Vse interakcije"},{"label":"Besedilo za \"Nezaključene interakcije\"","default":"Nezaključene interakcije"},{"label":"Dosežek","description":"\"@score\" in \"@maxscore\" sta spremenljivki.","default":"@score / @maxscore"},{"label":"Napredek v interakcijah knjige po straneh","description":"\"@left\" in \"@max\" sta spremenljivki.","default":"Zaključene interakcije: @left od @max"},{"label":"Besedilo za \"Ni interakcij\"","default":"Ni interakcij"},{"label":"Besedilo za \"Dosežek\"","default":"Dosežek"},{"label":"Besedilo za gumb \"Povzetek\"","default":"Povzetek"},{"label":"Besedilo za \"Ni interakcij\"","default":"Ni interakcij"},{"label":"Besedilo za \"Pred ogledom povzetka je treba zaključiti vsaj eno interakcijo.\"","default":"Pred ogledom povzetka je treba zaključiti vsaj eno interakcijo."},{"label":"Besedilo za \"Odgovori so oddani v pregled!\"","default":"Odgovori so oddani v pregled!"},{"label":"Besedilo za indikator Ogled knjige","default":"Ogled knjige"},{"label":"Besedilo za indikator Zaključene interakcije","default":"Zaključene interakcije"},{"label":"Besedilo za indikator Skupen dosežek","default":"Skupen dosežek"},{"label":"Besedilo za dostopnost vsebin","fields":[{"label":"Besedilo za napredek ogleda strani","description":"Nadomestno besedilo za vizualizacijo napredka ogleda strani. @page in @total sta spremenljivki.","default":"Stran @page od @total."},{"label":"Besedilo za kazalo vsebine","default":"Kazalo vsebine za navigacijo"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // sma.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'sma',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Enable book cover","description":"A cover that shows info regarding the book before access"},{"label":"Cover Page","fields":[{"label":"Cover description","description":"This text will be the description of your book."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Pages","entity":"Page","widgets":[{"label":"Default"}],"field":{"label":"Item","fields":[{"label":"Page"}]}},{"label":"Behavioural settings","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Display table of contents as default","description":"When enabled the table of contents is showed when opening the book"},{"label":"Display Progress Indicators","description":"When enabled there will be indicators per page showing the user if he is done with the page or not."},{"label":"Enable automatic progress","description":"If enabled a page without tasks is considered done when viewed. A page with tasks when all tasks are done. If disabled there will be a button at the bottom of every page for the user to click when done with the page."},{"label":"Display summary","description":"When enabled the user can see a summary and submit the progress/answers"}]},{"label":"Translation for \"Read\"","default":"Read"},{"label":"Translation for \"Display \'Table of contents\'\"","default":"Display \'Table of contents\'"},{"label":"Translation for \"Hide \'Table of contents\'\"","default":"Hide \'Table of contents\'"},{"label":"Translation for \"Next page\"","default":"Next page"},{"label":"Translation for \"Previous page\"","default":"Previous page"},{"label":"Translation for \"Page completed!\"","default":"Page completed!"},{"label":"Translation for \"@pages of @total completed\" (@pages and @total will be replaced by actual values)","default":"@pages of @total completed"},{"label":"Translation for \"Incomplete page\"","default":"Incomplete page"},{"label":"Translation for \"Navigate to the top\"","default":"Navigate to the top"},{"label":"Translation for \"I have finished this page\"","default":"I have finished this page"},{"label":"Fullscreen button label","default":"Fullscreen"},{"label":"Exit fullscreen button label","default":"Exit fullscreen"},{"label":"Page progress in book","description":"\"@count\" will be replaced by page count, and \"@total\" with the total number of pages","default":"@count of @total pages"},{"label":"Interaction progress","description":"\"@count\" will be replaced by interaction count, and \"@total\" with the total number of interactions","default":"@count of @total interactions"},{"label":"Translation for \"Submit report\"","default":"Submit Report"},{"label":"Label for \"restart\" button","default":"Restart"},{"label":"Summary header","default":"Summary"},{"label":"Translation for \"All interactions\"","default":"All interactions"},{"label":"Translation for \"Unanswered interactions\"","default":"Unanswered interactions"},{"label":"Score","description":"\"@score\" will be replaced with current score, and \"@maxscore\" will be replaced with max achievable score","default":"@score / @maxscore"},{"label":"Per page interactions completion","description":"\"@left\" will be replaced with remaining interactions, and \"@max\" will be replaced with total number of interactions on the page","default":"@left of @max interactions completed"},{"label":"Translation for \"No interactions\"","default":"No interactions"},{"label":"Translation for \"Score\"","default":"Score"},{"label":"Label for \"Summary & submit\" button","default":"Summary & submit"},{"label":"Translation for \"You have not interacted with any pages.\"","default":"You have not interacted with any pages."},{"label":"Translation for \"You have to interact with at least one page before you can see the summary.\"","default":"You have to interact with at least one page before you can see the summary."},{"label":"Translation for \"Your answers are submitted for review!\"","default":"Your answers are submitted for review!"},{"label":"Summary progress label","default":"Book progress"},{"label":"Interactions progress label","default":"Interactions progress"},{"label":"Total score label","default":"Total score"},{"label":"Accessibility texts","fields":[{"label":"Page progress textual alternative","description":"An alternative text for the visual page progress. @page and @total variables available.","default":"Page @page of @total."},{"label":"Label for expanding/collapsing navigation menu","default":"Toggle navigation menu"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // sme.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'sme',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Enable book cover","description":"A cover that shows info regarding the book before access"},{"label":"Cover Page","fields":[{"label":"Cover description","description":"This text will be the description of your book."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Pages","entity":"Page","widgets":[{"label":"Default"}],"field":{"label":"Item","fields":[{"label":"Page"}]}},{"label":"Behavioural settings","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Display table of contents as default","description":"When enabled the table of contents is showed when opening the book"},{"label":"Display Progress Indicators","description":"When enabled there will be indicators per page showing the user if he is done with the page or not."},{"label":"Enable automatic progress","description":"If enabled a page without tasks is considered done when viewed. A page with tasks when all tasks are done. If disabled there will be a button at the bottom of every page for the user to click when done with the page."},{"label":"Display summary","description":"When enabled the user can see a summary and submit the progress/answers"}]},{"label":"Translation for \"Read\"","default":"Read"},{"label":"Translation for \"Display \'Table of contents\'\"","default":"Display \'Table of contents\'"},{"label":"Translation for \"Hide \'Table of contents\'\"","default":"Hide \'Table of contents\'"},{"label":"Translation for \"Next page\"","default":"Next page"},{"label":"Translation for \"Previous page\"","default":"Previous page"},{"label":"Translation for \"Page completed!\"","default":"Page completed!"},{"label":"Translation for \"@pages of @total completed\" (@pages and @total will be replaced by actual values)","default":"@pages of @total completed"},{"label":"Translation for \"Incomplete page\"","default":"Incomplete page"},{"label":"Translation for \"Navigate to the top\"","default":"Navigate to the top"},{"label":"Translation for \"I have finished this page\"","default":"I have finished this page"},{"label":"Fullscreen button label","default":"Fullscreen"},{"label":"Exit fullscreen button label","default":"Exit fullscreen"},{"label":"Page progress in book","description":"\"@count\" will be replaced by page count, and \"@total\" with the total number of pages","default":"@count of @total pages"},{"label":"Interaction progress","description":"\"@count\" will be replaced by interaction count, and \"@total\" with the total number of interactions","default":"@count of @total interactions"},{"label":"Translation for \"Submit report\"","default":"Submit Report"},{"label":"Label for \"restart\" button","default":"Restart"},{"label":"Summary header","default":"Summary"},{"label":"Translation for \"All interactions\"","default":"All interactions"},{"label":"Translation for \"Unanswered interactions\"","default":"Unanswered interactions"},{"label":"Score","description":"\"@score\" will be replaced with current score, and \"@maxscore\" will be replaced with max achievable score","default":"@score / @maxscore"},{"label":"Per page interactions completion","description":"\"@left\" will be replaced with remaining interactions, and \"@max\" will be replaced with total number of interactions on the page","default":"@left of @max interactions completed"},{"label":"Translation for \"No interactions\"","default":"No interactions"},{"label":"Translation for \"Score\"","default":"Score"},{"label":"Label for \"Summary & submit\" button","default":"Summary & submit"},{"label":"Translation for \"You have not interacted with any pages.\"","default":"You have not interacted with any pages."},{"label":"Translation for \"You have to interact with at least one page before you can see the summary.\"","default":"You have to interact with at least one page before you can see the summary."},{"label":"Translation for \"Your answers are submitted for review!\"","default":"Your answers are submitted for review!"},{"label":"Summary progress label","default":"Book progress"},{"label":"Interactions progress label","default":"Interactions progress"},{"label":"Total score label","default":"Total score"},{"label":"Accessibility texts","fields":[{"label":"Page progress textual alternative","description":"An alternative text for the visual page progress. @page and @total variables available.","default":"Page @page of @total."},{"label":"Label for expanding/collapsing navigation menu","default":"Toggle navigation menu"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // smj.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'smj',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Enable book cover","description":"A cover that shows info regarding the book before access"},{"label":"Cover Page","fields":[{"label":"Cover description","description":"This text will be the description of your book."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Pages","entity":"Page","widgets":[{"label":"Default"}],"field":{"label":"Item","fields":[{"label":"Page"}]}},{"label":"Behavioural settings","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Display table of contents as default","description":"When enabled the table of contents is showed when opening the book"},{"label":"Display Progress Indicators","description":"When enabled there will be indicators per page showing the user if he is done with the page or not."},{"label":"Enable automatic progress","description":"If enabled a page without tasks is considered done when viewed. A page with tasks when all tasks are done. If disabled there will be a button at the bottom of every page for the user to click when done with the page."},{"label":"Display summary","description":"When enabled the user can see a summary and submit the progress/answers"}]},{"label":"Translation for \"Read\"","default":"Read"},{"label":"Translation for \"Display \'Table of contents\'\"","default":"Display \'Table of contents\'"},{"label":"Translation for \"Hide \'Table of contents\'\"","default":"Hide \'Table of contents\'"},{"label":"Translation for \"Next page\"","default":"Next page"},{"label":"Translation for \"Previous page\"","default":"Previous page"},{"label":"Translation for \"Page completed!\"","default":"Page completed!"},{"label":"Translation for \"@pages of @total completed\" (@pages and @total will be replaced by actual values)","default":"@pages of @total completed"},{"label":"Translation for \"Incomplete page\"","default":"Incomplete page"},{"label":"Translation for \"Navigate to the top\"","default":"Navigate to the top"},{"label":"Translation for \"I have finished this page\"","default":"I have finished this page"},{"label":"Fullscreen button label","default":"Fullscreen"},{"label":"Exit fullscreen button label","default":"Exit fullscreen"},{"label":"Page progress in book","description":"\"@count\" will be replaced by page count, and \"@total\" with the total number of pages","default":"@count of @total pages"},{"label":"Interaction progress","description":"\"@count\" will be replaced by interaction count, and \"@total\" with the total number of interactions","default":"@count of @total interactions"},{"label":"Translation for \"Submit report\"","default":"Submit Report"},{"label":"Label for \"restart\" button","default":"Restart"},{"label":"Summary header","default":"Summary"},{"label":"Translation for \"All interactions\"","default":"All interactions"},{"label":"Translation for \"Unanswered interactions\"","default":"Unanswered interactions"},{"label":"Score","description":"\"@score\" will be replaced with current score, and \"@maxscore\" will be replaced with max achievable score","default":"@score / @maxscore"},{"label":"Per page interactions completion","description":"\"@left\" will be replaced with remaining interactions, and \"@max\" will be replaced with total number of interactions on the page","default":"@left of @max interactions completed"},{"label":"Translation for \"No interactions\"","default":"No interactions"},{"label":"Translation for \"Score\"","default":"Score"},{"label":"Label for \"Summary & submit\" button","default":"Summary & submit"},{"label":"Translation for \"You have not interacted with any pages.\"","default":"You have not interacted with any pages."},{"label":"Translation for \"You have to interact with at least one page before you can see the summary.\"","default":"You have to interact with at least one page before you can see the summary."},{"label":"Translation for \"Your answers are submitted for review!\"","default":"Your answers are submitted for review!"},{"label":"Summary progress label","default":"Book progress"},{"label":"Interactions progress label","default":"Interactions progress"},{"label":"Total score label","default":"Total score"},{"label":"Accessibility texts","fields":[{"label":"Page progress textual alternative","description":"An alternative text for the visual page progress. @page and @total variables available.","default":"Page @page of @total."},{"label":"Label for expanding/collapsing navigation menu","default":"Toggle navigation menu"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // sv.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'sv',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Aktivera bokomslag","description":"Ett bokomslag som visar information om boken"},{"label":"Omslagssida","fields":[{"label":"Omslagets beskrivning","description":"Denna text beskriver din bok."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Sidor","entity":"Sida","widgets":[{"label":"Standard"}],"field":{"label":"Post","fields":[{"label":"Sida"}]}},{"label":"Beteende-inställningar","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Visa innehållsförteckning som standard","description":"När aktiverat så visas innehållsförteckningen vid öppning av boken"},{"label":"Visa framstegsindikatorer","description":"När aktiverat så visas framstegsindikatorer på varje sida, som visar användaren om sidan är färdig eller inte."},{"label":"Aktivera automatisk framsteg","description":"När aktiverat så kommer en sida utan uppgifter att betraktas som genomförd när den är visad.En sida med uppgifter är genomförd när alla uppgifter är genomförda. När inaktiverat så kommer det finnas en knapp längst ned på varje sida där användaren kan klicka när denne är färdig med sidan."},{"label":"Visa sammanfattning","description":"När aktiverat så kan användaren se en sammanfattning och skicka in sina framsteg/ svar."}]},{"label":"Översättning för \"Läsa\"","default":"Läsa"},{"label":"Översättning för \"Visa \'Innehållsförteckning\'\"","default":"Visa \'Innehållsförteckning\'"},{"label":"Överstättning för \"Dölj \'Innehållsförteckning\'\"","default":"Dölj \'Innehållsförteckning\'"},{"label":"Översättning för \"Nästa sida\"","default":"Nästa sida"},{"label":"Översättning för \"Föregående sida\"","default":"Föregående sida"},{"label":"Översättning för \"Sida genomförd!\"","default":"Sida genomförd!"},{"label":"Översättning för \"@pages av @total genomförda\" (@pages och @total kommer ersättas med riktiga värden)","default":"@pages av @total genomförda"},{"label":"Översättning för \"Ej genomförd sida\"","default":"Ej genomförd sida"},{"label":"Översättning för \"Navigera till toppen\"","default":"Navigera till toppen"},{"label":"Översättnin för \"Jag har genomfört denna sida\"","default":"Jag har genomfört denna sida"},{"label":"Etikett för knapp för helskärmsläge","default":"Helskärmsläge"},{"label":"Etikett för knapp för avsluta helskärmsläge","default":"Avsluta helskärmsläge"},{"label":"Framsteg på sidor i bok","description":"\"@count\" kommer ersättas med antalet sidor, och \"@total\" med totala antalet sidor","default":"@count av @total sidor"},{"label":"Framsteg i interaktiva övningar","description":"\"@count\" kommer ersättas med antalet interaktiva övningar, och \"@total\" med totala antalet interaktiva övningar","default":"@count av @total interaktiva övningar"},{"label":"Översättning för \"Skicka in rapport\"","default":"Skicka in rapport"},{"label":"Etikett för \"starta om\"-knapp","default":"Starta om"},{"label":"Rubrik för sammanfattning","default":"Sammanfattning"},{"label":"Översättning för \"Alla interaktiva övningar\"","default":"Alla interaktiva övningar"},{"label":"Översättning för \"Obesvarade interaktiva övningar\"","default":"Obesvarade interaktiva övningar"},{"label":"Poäng","description":"\"@score\" kommer att ersättas med aktuell poäng, och \"@maxscore\" ersättas med max poäng som kan uppnås","default":"@score / @maxscore"},{"label":"Genomförande av interaktiva övningar per sida","description":"\"@left\" kommer att ersättas med återstående interaktiva övningar, och \"@max\" ersättas med totala antalet interaktiva övningar på sidan","default":"@left of @max interaktiva övningar genomförda"},{"label":"Översättning för \"Inga interaktiva övningar\"","default":"Inga interaktiva övningar"},{"label":"Översättning för \"Poäng\"","default":"Poäng"},{"label":"Etikett för \"Sammanfattning och skicka in\"-knapp","default":"Sammanfattning och skicka in"},{"label":"Översättning för \"Du har inte genomfört interaktiv övning på någon sida.\"","default":"Du har inte genomfört interaktiv övning på någon sida."},{"label":"Översättning för \"Du måste genomföra åtminstone en sidas interaktiva övningar innan du kan se sammanfattningen.\"","default":"Du måste genomföra åtminstone en sidas interaktiva övningar innan du kan se sammanfattningen."},{"label":"Översättning för \"Dina svar har skickats in för granskning!\"","default":"Dina svar har skickats in för granskning!"},{"label":"Etikett för sammanfattning av framsteg","default":"Framsteg i bok"},{"label":"Etikett för framsteg i interaktiva övningar","default":"Framsteg i interaktiva övningar"},{"label":"Etikett för total poäng","default":"Total poäng"},{"label":"Tillgänglighets-texter","fields":[{"label":"Text-alternativ till framsteg på sida","description":"En alternativ text för visualiseringen av framsteg på sida. @page och @total variabler finns att använda.","default":"Sida @page av @total."},{"label":"Etikett för att expandera/komprimera navigeringsmenyn","default":"Växla läge på navigationsmeny"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // te.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'te',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"పుస్తకం ముఖచిత్రాన్ని ఎనేబుల్ చేయండి","description":"పుస్తకం యాక్సెస్ చేసే ముందు కవర్ / ముఖచిత్రం పుస్తకం గురించి సమాచారం తెలియచేస్తుంది"},{"label":"ముఖచిత్రం పేజీ","fields":[{"label":"కవర్ /ముఖచిత్రం వివరణ","description":"ఈ టెక్స్ట్ మీ పుస్తకం యొక్క వివరణ"},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"పేజీలు","entity":"Page","widgets":[{"label":"డిఫాల్ట్"}],"field":{"label":"Item","fields":[{"label":"పేజీ"}]}},{"label":"బిహేవియరల్ సెట్టింగ్ లు","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"Display table of contents as default","description":"When enabled the table of contents is showed when opening the book"},{"label":"Display Progress Indicators","description":"When enabled there will be indicators per page showing the user if he is done with the page or not."},{"label":"Enable automatic progress","description":"If enabled a page without tasks is considered done when viewed. A page with tasks when all tasks are done. If disabled there will be a button at the bottom of every page for the user to click when done with the page."},{"label":"సమ్మరీ చూపించు","description":"ఎనేబుల్ అయి ఉన్నపుడు యూజర్ సమ్మరీను చూడగలరు మరియు ప్రోగ్రెస్ /సమాధానాలను సమర్పించగలరు"}]},{"label":"\"Read\" కై అనువాదం","default":"చదవండి"},{"label":"\"Display \'Table of contents\'\" కై అనువాదం","default":"విషయ సూచిక ని చూపించు"},{"label":"\"Hide \'Table of contents\'\" కైఅనువాదం","default":"\'Table of contents\' ను దాచి ఉంచు"},{"label":"\"Next page\"కై అనువాదం","default":"తరువాతి పేజీ"},{"label":"\"Previous page\"కై అనువాదం","default":"ముందు పేజి"},{"label":"\"Page completed!\" కై అనువాదం","default":"పేజీ పూర్తయింది!"},{"label":"\"@pages of @total completed\" (@pages and @total will be replaced by actual values)కై అనువాదం","default":"@మొత్తం పేజీల్లో @పేజీలు పూర్తి చేసారు"},{"label":"\"Incomplete page\"కై అనువాదం","default":"అసంపూర్ణ పేజీ"},{"label":"\"Navigate to the top\"కై అనువాదం","default":"పైకి నావిగేట్ చేయండి"},{"label":"\"I have finished this page\"కై అనువాదం","default":"I have finished this page"},{"label":"Fullscreen button label","default":"Fullscreen"},{"label":"Exit fullscreen button label","default":"Exit fullscreen"},{"label":"Page progress in book","description":"\"@count\" will be replaced by page count, and \"@total\" with the total number of pages","default":"@count of @total pages"},{"label":"Interaction progress","description":"\"@count\" will be replaced by interaction count, and \"@total\" with the total number of interactions","default":"@count of @total interactions"},{"label":"Translation for \"Submit report\"","default":"Submit Report"},{"label":"Label for \"restart\" button","default":"Restart"},{"label":"Summary header","default":"Summary"},{"label":"Translation for \"All interactions\"","default":"All interactions"},{"label":"Translation for \"Unanswered interactions\"","default":"Unanswered interactions"},{"label":"Score","description":"\"@score\" will be replaced with current score, and \"@maxscore\" will be replaced with max achievable score","default":"@score / @maxscore"},{"label":"Per page interactions completion","description":"\"@left\" will be replaced with remaining interactions, and \"@max\" will be replaced with total number of interactions on the page","default":"@left of @max interactions completed"},{"label":"Translation for \"No interactions\"","default":"No interactions"},{"label":"Translation for \"Score\"","default":"Score"},{"label":"Label for \"Summary & submit\" button","default":"Summary & submit"},{"label":"Translation for \"You have not interacted with any pages.\"","default":"You have not interacted with any pages."},{"label":"Translation for \"You have to interact with at least one page before you can see the summary.\"","default":"You have to interact with at least one page before you can see the summary."},{"label":"Translation for \"Your answers are submitted for review!\"","default":"Your answers are submitted for review!"},{"label":"Summary progress label","default":"Book progress"},{"label":"Interactions progress label","default":"Interactions progress"},{"label":"Total score label","default":"Total score"},{"label":"Accessibility texts","fields":[{"label":"Page progress textual alternative","description":"An alternative text for the visual page progress. @page and @total variables available.","default":"Page @page of @total."},{"label":"Label for expanding/collapsing navigation menu","default":"Toggle navigation menu"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // tr.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'tr',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Kitap kapağını etkinleştir","description":"Etkinlikten önce kitapla ilgili bilgileri gösteren bir kapak"},{"label":"Kapak Sayfası","fields":[{"label":"Kapak açıklaması","description":"Bu metin kitabınızın açıklaması olacaktır."},{"label":"Cover medium","description":"Optional medium for the introduction."}]},{"label":"Sayfalar","entity":"Sayfa","widgets":[{"label":"Varsayılan"}],"field":{"label":"Öge","fields":[{"label":"Sayfa"}]}},{"label":"Etkinlik Ayarları","fields":[{"label":"Base color","description":"Set the base color that will define the overall color scheme of the book. Please ensure a high enough contrast.","default":"#1768c4"},{"label":"İçindekileri varsayılan olarak görüntüle","description":"Etkinleştirildiğinde, kitap açılırken içindekiler tablosu gösterilir"},{"label":"İlerleme Göstergelerini Görüntüle","description":"Etkinleştirildiğinde, kullanıcının sayfayla işinin bitip bitmediğini gösteren sayfa başına göstergeler olacaktır."},{"label":"Otomatik ilerlemeyi etkinleştir","description":"Etkinleştirilirse, etkinlik olmayan bir sayfa görüntülendiğinde tamamlanmış olarak kabul edilir. Tüm görevler tamamlandığında yeni görevleri içeren bir sayfaya ilerler. Devre dışı bırakılırsa, her sayfanın altında, kullanıcının sayfayla işi bittiğinde tıklaması için bir düğme olacaktır."},{"label":"Özeti görüntüle","description":"Etkinleştirildiğinde, kullanıcı bir özeti görebilir ve ilerlemeyi/cevapları gönderebilir"}]},{"label":"\"Oku\" için çeviri","default":"Oku"},{"label":"\"\'İçindekiler\'i Görüntüle\" için çeviri","default":"\'İçindekiler\'i göster"},{"label":"\"\'İçindekiler\'i gizle\" çevirisi","default":"\'İçindekiler\'i gizle"},{"label":"\"Sonraki sayfa\" için çeviri","default":"Sonraki Sayfa"},{"label":"\"Önceki sayfa\" için çeviri","default":"Önceki sayfa"},{"label":"\"Sayfa tamamlandı!\" için çeviri","default":"Sayfa tamamlandı!"},{"label":"\"@total sayfadan @pages sayfa tamamlandı\"nın çevirisi (@pages ve @total gerçek değerlerle değiştirilecektir)","default":"@total sayfadan @pages sayfa tamamlandı"},{"label":"\"Tamamlanmamış sayfa\" için çeviri","default":"Tamamlanmamış sayfa"},{"label":"\"En üste git\"in çevirisi","default":"En üste git"},{"label":"\"Bu sayfayı bitirdim\"in çevirisi","default":"Bu sayfayı bitirdim"},{"label":"Tam ekran düğme etiketi","default":"Tam ekran"},{"label":"Tam ekrandan çık düğme etiketi","default":"Tam ekrandan çık"},{"label":"Kitapta sayfa ilerlemesi","description":"\"@count\" sayfa sayısıyla ve \"@total\" toplam sayfa sayısıyla değiştirilecektir","default":"@total sayfadan @count sayfa"},{"label":"Etkileşim ilerlemesi","description":"\"@count\" yerine etkileşim sayısı, \"@toplam\" ise toplam etkileşim sayısıyla değiştirilir","default":"@total etkileşimden @count etkileşim"},{"label":"\"Raporu Gönder\"in çevirisi","default":"Raporu Gönder"},{"label":"\"Yeniden Başlat\" düğmesi için etiket","default":"Yeniden Başlat"},{"label":"Özet başlığı","default":"Özet"},{"label":"\"Tüm Etkileşimler\" için çeviri","default":"Tüm Etkileşimler"},{"label":"\"Cevaplanmamış Etkileşimler\"in çevirisi","default":"Cevaplanmamış Etkileşimler"},{"label":"Puan","description":"\"@score\" geçerli puanla değiştirilecek ve \"@maxscore\" elde edilebilecek maksimum puanla değiştirilecek","default":"@score / @maxscore"},{"label":"Sayfa başına etkileşim tamamlama","description":"\"@left\" kalan etkileşimlerle değiştirilecek ve \"@max\" sayfadaki toplam etkileşim sayısıyla değiştirilecek","default":"@max etkileşimden @left etkileşim tamamlandı"},{"label":"\"Etkileşim Yok\" çevirisi","default":"Etkileşim Yok"},{"label":"\"Puan\" için çeviri","default":"Puan"},{"label":"\"Özet & gönder\" düğmesi için etiket","default":"Özet & gönder"},{"label":"\"Hiçbir sayfayla etkileşim kurmadınız\"ın çevirisi","default":"Hiçbir sayfayla etkileşim kurmadınız."},{"label":"\"Özeti görebilmeniz için en az bir sayfayla etkileşim kurmanız gerekir\"in çevirisi","default":"Özeti görebilmeniz için en az bir sayfayla etkileşim kurmanız gerekir."},{"label":"\"Yanıtlarınız incelemeye gönderildi!\" için çeviri","default":"Yanıtlarınız incelemeye gönderildi!"},{"label":"Özet ilerleme etiketi","default":"Kitap ilerlemesi"},{"label":"Etkileşim ilerleme etiketi","default":"Etkileşim ilerlemesi"},{"label":"Toplam puan etiketi","default":"Toplam puan"},{"label":"Erişilebilirlik metinleri","fields":[{"label":"Sayfa ilerleme metni alternatifi","description":"Görsel sayfa ilerlemesi için alternatif bir metin. @page yerine sayfa sayısı ve @total yerine toplam sayfa sayısı getirilecek.","default":"@total sayfadan @page. sayfa."},{"label":"Genişleyen/daraltan gezinme menüsü için etiket","default":"Gezinme menüsünü aç/kapat"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ // vi.json
+ DB::table('h5p_libraries_languages')->insert([
+ 'library_id' => $h5pIBLibId,
+ 'language_code' => 'vi',
+ 'translation' => json_encode(json_decode('{"semantics":[{"label":"Bật bìa sách","description":"Bìa hiển thị thông tin về cuốn sách trước khi truy cập"},{"label":"Trang bìa","fields":[{"label":"Mô tả bìa","description":"Văn bản này sẽ là mô tả của cuốn sách của bạn."},{"label":"Che trung bình","description":"Phương tiện tùy chọn cho phần giới thiệu."}]},{"label":"Trang","entity":"Trang","widgets":[{"label":"Mặc định"}],"field":{"label":"Mục","fields":[{"label":"Trang"}]}},{"label":"Cài đặt hành vi","fields":[{"label":"Màu cơ bản","description":"Đặt màu cơ bản sẽ xác định bảng màu tổng thể của cuốn sách. Vui lòng đảm bảo độ tương phản đủ cao.","default":"#1768c4"},{"label":"Hiển thị mục lục theo mặc định","description":"Khi được bật, mục lục sẽ hiển thị khi mở sách"},{"label":"Hiển thị các chỉ báo tiến độ","description":"Khi được kích hoạt, sẽ có các chỉ báo trên mỗi trang hiển thị cho người dùng xem anh ta đã hoàn tất trang đó hay chưa."},{"label":"Bật tiến trình tự động","description":"Nếu được bật, một trang không có nhiệm vụ được coi là hoàn thành khi xem. Một trang với các nhiệm vụ khi tất cả các nhiệm vụ được hoàn thành. Nếu bị vô hiệu hóa, sẽ có một nút ở cuối mỗi trang để người dùng nhấp vào khi hoàn tất trang."},{"label":"Hiển thị tóm tắt","description":"Khi được bật, người dùng có thể xem tóm tắt và gửi tiến trình / câu trả lời"}]},{"label":"Bản dịch cho \"Đọc\"","default":"Đọc"},{"label":"Bản dịch cho \"Hiển thị \'Mục lục\'\"","default":"Hiển thị \'Mục lục\'"},{"label":"Bản dịch cho \"Ẩn \'Mục lục\'\"","default":"Ẩn \'Mục lục\'"},{"label":"Bản dịch cho \"Trang tiếp theo\"","default":"Trang tiếp theo"},{"label":"Bản dịch cho \"Trang trước\"","default":"Trang trước"},{"label":"Bản dịch cho \"Trang đã hoàn thành!\"","default":"Trang đã hoàn thành!"},{"label":"Bản dịch cho \"@pages of @total đã hoàn thành\" (@pages và @total sẽ được thay thế bằng các giá trị thực tế)","default":"@pages của @total đã hoàn thành"},{"label":"Bản dịch cho \"Trang chưa hoàn chỉnh\"","default":"Trang chưa hoàn chỉnh"},{"label":"Bản dịch cho \"Điều hướng lên đầu\"","default":"Điều hướng lên đầu"},{"label":"Bản dịch cho \"Tôi đã hoàn thành trang này\"","default":"Tôi đã hoàn thành trang này"},{"label":"Fullscreen button label","default":"Fullscreen"},{"label":"Exit fullscreen button label","default":"Exit fullscreen"},{"label":"Page progress in book","description":"\"@count\" will be replaced by page count, and \"@total\" with the total number of pages","default":"@count of @total pages"},{"label":"Interaction progress","description":"\"@count\" will be replaced by interaction count, and \"@total\" with the total number of interactions","default":"@count of @total interactions"},{"label":"Translation for \"Submit report\"","default":"Submit Report"},{"label":"Label for \"restart\" button","default":"Restart"},{"label":"Summary header","default":"Summary"},{"label":"Translation for \"All interactions\"","default":"All interactions"},{"label":"Translation for \"Unanswered interactions\"","default":"Unanswered interactions"},{"label":"Score","description":"\"@score\" will be replaced with current score, and \"@maxscore\" will be replaced with max achievable score","default":"@score / @maxscore"},{"label":"Per page interactions completion","description":"\"@left\" will be replaced with remaining interactions, and \"@max\" will be replaced with total number of interactions on the page","default":"@left of @max interactions completed"},{"label":"Translation for \"No interactions\"","default":"No interactions"},{"label":"Translation for \"Score\"","default":"Score"},{"label":"Label for \"Summary & submit\" button","default":"Summary & submit"},{"label":"Translation for \"You have not interacted with any pages.\"","default":"You have not interacted with any pages."},{"label":"Translation for \"You have to interact with at least one page before you can see the summary.\"","default":"You have to interact with at least one page before you can see the summary."},{"label":"Translation for \"Your answers are submitted for review!\"","default":"Your answers are submitted for review!"},{"label":"Summary progress label","default":"Book progress"},{"label":"Interactions progress label","default":"Interactions progress"},{"label":"Total score label","default":"Total score"},{"label":"Accessibility texts","fields":[{"label":"Page progress textual alternative","description":"An alternative text for the visual page progress. @page and @total variables available.","default":"Page @page of @total."},{"label":"Label for expanding/collapsing navigation menu","default":"Toggle navigation menu"}]}]}'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)
+ ]);
+ }
+
+ private function getSemantics() {
+ return '[
+ {
+ "name": "showCoverPage",
+ "type": "boolean",
+ "label": "Enable book cover",
+ "description": "A cover that shows info regarding the book before access",
+ "importance": "low",
+ "default": false
+ },
+ {
+ "name": "bookCover",
+ "type": "group",
+ "label": "Cover Page",
+ "importance": "medium",
+ "widget": "showWhen",
+ "showWhen": {
+ "rules": [
+ {
+ "field": "showCoverPage",
+ "equals": true
+ }
+ ]
+ },
+ "fields": [
+ {
+ "name": "coverDescription",
+ "type": "text",
+ "widget": "html",
+ "label": "Cover description",
+ "importance": "medium",
+ "optional": true,
+ "description": "This text will be the description of your book.",
+ "default": "
Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\"
They reduce wind resistance.<\/p>\\n\",\"
They make the ball more visually interesting.<\/p>\\n\",\"
They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\"
A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\"
A low pressure zone, which is what causes drag.<\/p>\\n\",\"
The ball has no spin.<\/p>\\n\",\"
The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Smooth Ball<\/p>\\n\"}],\"bookmarks\":[],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}", - "filtered": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"}}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\"
Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\"
They reduce wind resistance.<\/p>\\n\",\"
They make the ball more visually interesting.<\/p>\\n\",\"
They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\"
A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\"
A low pressure zone, which is what causes drag.<\/p>\\n\",\"
The ball has no spin.<\/p>\\n\",\"
The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Smooth Ball<\/p>\\n\"}],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}", - "slug": "science-of-golf-why-balls-have-dimples", - "embed_type": "div", - "disable": 9, - "content_type": null, - "authors": null, - "source": null, - "year_from": null, - "year_to": null, - "license": "U", - "license_version": null, - "license_extras": null, - "author_comments": null, - "changes": null, - "default_language": null, - "library": { - "id": 40, - "created_at": null, - "updated_at": null, - "name": "H5P.InteractiveVideo", - "title": "Interactive Video", - "major_version": 1, - "minor_version": 21, - "patch_version": 9, - "runnable": 1, - "restricted": 0, - "fullscreen": 1, - "embed_types": "iframe", - "preloaded_js": "dist\/h5p-interactive-video.js", - "preloaded_css": "dist\/h5p-interactive-video.css", - "drop_library_css": "", - "semantics": "[\n {\n \"name\": \"interactiveVideo\",\n \"type\": \"group\",\n \"widget\": \"wizard\",\n \"label\": \"Interactive Video Editor\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"video\",\n \"type\": \"group\",\n \"label\": \"Upload\/embed video\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"files\",\n \"type\": \"video\",\n \"label\": \"Add a video\",\n \"importance\": \"high\",\n \"description\": \"Click below to add a video you wish to use in your interactive video. You can add a video link or upload video files. It is possible to add several versions of the video with different qualities. To ensure maximum support in browsers at least add a version in webm and mp4 formats.\",\n \"extraAttributes\": [\n \"metadata\"\n ],\n \"enableCustomQualityLabel\": true\n },\n {\n \"name\": \"startScreenOptions\",\n \"type\": \"group\",\n \"label\": \"Start screen options (unsupported for YouTube videos)\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"title\",\n \"type\": \"text\",\n \"label\": \"The title of this interactive video\",\n \"importance\": \"low\",\n \"maxLength\": 60,\n \"default\": \"Interactive Video\",\n \"description\": \"Used in summaries, statistics etc.\"\n },\n {\n \"name\": \"hideStartTitle\",\n \"type\": \"boolean\",\n \"label\": \"Hide title on video start screen\",\n \"importance\": \"low\",\n \"optional\": true,\n \"default\": false\n },\n {\n \"name\": \"shortStartDescription\",\n \"type\": \"text\",\n \"label\": \"Short description (Optional)\",\n \"importance\": \"low\",\n \"optional\": true,\n \"maxLength\": 120,\n \"description\": \"Optional. Display a short description text on the video start screen. Does not work for YouTube videos.\"\n },\n {\n \"name\": \"poster\",\n \"type\": \"image\",\n \"label\": \"Poster image\",\n \"importance\": \"low\",\n \"optional\": true,\n \"description\": \"Image displayed before the user launches the video. Does not work for YouTube Videos.\"\n }\n ]\n },\n {\n \"name\": \"textTracks\",\n \"type\": \"group\",\n \"label\": \"Text tracks (unsupported for YouTube videos)\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"videoTrack\",\n \"type\": \"list\",\n \"label\": \"Available text tracks\",\n \"importance\": \"low\",\n \"optional\": true,\n \"entity\": \"Track\",\n \"min\": 0,\n \"defaultNum\": 1,\n \"field\": {\n \"name\": \"track\",\n \"type\": \"group\",\n \"label\": \"Track\",\n \"importance\": \"low\",\n \"expanded\": false,\n \"fields\": [\n {\n \"name\": \"label\",\n \"type\": \"text\",\n \"label\": \"Track label\",\n \"description\": \"Used if you offer multiple tracks and the user has to choose a track. For instance 'Spanish subtitles' could be the label of a Spanish subtitle track.\",\n \"importance\": \"low\",\n \"default\": \"Subtitles\",\n \"optional\": true\n },\n {\n \"name\": \"kind\",\n \"type\": \"select\",\n \"label\": \"Type of text track\",\n \"importance\": \"low\",\n \"default\": \"subtitles\",\n \"options\": [\n {\n \"value\": \"subtitles\",\n \"label\": \"Subtitles\"\n },\n {\n \"value\": \"captions\",\n \"label\": \"Captions\"\n },\n {\n \"value\": \"descriptions\",\n \"label\": \"Descriptions\"\n }\n ]\n },\n {\n \"name\": \"srcLang\",\n \"type\": \"text\",\n \"label\": \"Source language, must be defined for subtitles\",\n \"importance\": \"low\",\n \"default\": \"en\",\n \"description\": \"Must be a valid BCP 47 language tag. If 'Subtitles' is the type of text track selected, the source language of the track must be defined.\"\n },\n {\n \"name\": \"track\",\n \"type\": \"file\",\n \"label\": \"Track source (WebVTT file)\",\n \"importance\": \"low\"\n }\n ]\n }\n },\n {\n \"name\": \"defaultTrackLabel\",\n \"type\": \"text\",\n \"label\": \"Default text track\",\n \"description\": \"If left empty or not matching any of the text tracks the first text track will be used as the default.\",\n \"importance\": \"low\",\n \"optional\": true\n }\n ]\n }\n ]\n },\n {\n \"name\": \"assets\",\n \"type\": \"group\",\n \"label\": \"Add interactions\",\n \"importance\": \"high\",\n \"widget\": \"interactiveVideo\",\n \"video\": \"video\/files\",\n \"poster\": \"video\/startScreenOptions\/poster\",\n \"fields\": [\n {\n \"name\": \"interactions\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"interaction\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"duration\",\n \"type\": \"group\",\n \"widget\": \"duration\",\n \"label\": \"Display time\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"from\",\n \"type\": \"number\"\n },\n {\n \"name\": \"to\",\n \"type\": \"number\"\n }\n ]\n },\n {\n \"name\": \"pause\",\n \"label\": \"Pause video\",\n \"importance\": \"low\",\n \"type\": \"boolean\"\n },\n {\n \"name\": \"displayType\",\n \"label\": \"Display as\",\n \"importance\": \"low\",\n \"description\": \"Button<\/b> is a collapsed interaction the user must press to open. Poster<\/b> is an expanded interaction displayed directly on top of the video\",\n \"type\": \"select\",\n \"widget\": \"imageRadioButtonGroup\",\n \"options\": [\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"poster\",\n \"label\": \"Poster\"\n }\n ],\n \"default\": \"button\"\n },\n {\n \"name\": \"buttonOnMobile\",\n \"label\": \"Turn into button on small screens\",\n \"importance\": \"low\",\n \"type\": \"boolean\",\n \"default\": false\n },\n {\n \"name\": \"label\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"label\": \"Label\",\n \"importance\": \"low\",\n \"description\": \"Label displayed next to interaction icon.\",\n \"optional\": true,\n \"enterMode\": \"p\",\n \"tags\": [\n \"p\"\n ]\n },\n {\n \"name\": \"x\",\n \"type\": \"number\",\n \"importance\": \"low\",\n \"widget\": \"none\"\n },\n {\n \"name\": \"y\",\n \"type\": \"number\",\n \"importance\": \"low\",\n \"widget\": \"none\"\n },\n {\n \"name\": \"width\",\n \"type\": \"number\",\n \"widget\": \"none\",\n \"importance\": \"low\",\n \"optional\": true\n },\n {\n \"name\": \"height\",\n \"type\": \"number\",\n \"widget\": \"none\",\n \"importance\": \"low\",\n \"optional\": true\n },\n {\n \"name\": \"libraryTitle\",\n \"type\": \"text\",\n \"importance\": \"low\",\n \"optional\": true,\n \"widget\": \"none\"\n },\n {\n \"name\": \"action\",\n \"type\": \"library\",\n \"importance\": \"low\",\n \"options\": [\n \"H5P.Nil 1.0\",\n \"H5P.Text 1.1\",\n \"H5P.Table 1.1\",\n \"H5P.Link 1.3\",\n \"H5P.Image 1.1\",\n \"H5P.Summary 1.10\",\n \"H5P.SingleChoiceSet 1.11\",\n \"H5P.MultiChoice 1.14\",\n \"H5P.TrueFalse 1.6\",\n \"H5P.Blanks 1.12\",\n \"H5P.DragQuestion 1.13\",\n \"H5P.MarkTheWords 1.9\",\n \"H5P.DragText 1.8\",\n \"H5P.GoToQuestion 1.3\",\n \"H5P.IVHotspot 1.2\",\n \"H5P.Questionnaire 1.2\",\n \"H5P.FreeTextQuestion 1.0\"\n ]\n },\n {\n \"name\": \"adaptivity\",\n \"type\": \"group\",\n \"label\": \"Adaptivity\",\n \"importance\": \"low\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"correct\",\n \"type\": \"group\",\n \"label\": \"Action on all correct\",\n \"fields\": [\n {\n \"name\": \"seekTo\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Seek to\",\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"allowOptOut\",\n \"type\": \"boolean\",\n \"label\": \"Allow the user to opt out and continue\"\n },\n {\n \"name\": \"message\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"enterMode\": \"p\",\n \"tags\": [\n \"strong\",\n \"em\",\n \"del\",\n \"a\",\n \"code\"\n ],\n \"label\": \"Message\"\n },\n {\n \"name\": \"seekLabel\",\n \"type\": \"text\",\n \"label\": \"Label for seek button\"\n }\n ]\n },\n {\n \"name\": \"wrong\",\n \"type\": \"group\",\n \"label\": \"Action on wrong\",\n \"fields\": [\n {\n \"name\": \"seekTo\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Seek to\",\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"allowOptOut\",\n \"type\": \"boolean\",\n \"label\": \"Allow the user to opt out and continue\"\n },\n {\n \"name\": \"message\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"enterMode\": \"p\",\n \"tags\": [\n \"strong\",\n \"em\",\n \"del\",\n \"a\",\n \"code\"\n ],\n \"label\": \"Message\"\n },\n {\n \"name\": \"seekLabel\",\n \"type\": \"text\",\n \"label\": \"Label for seek button\"\n }\n ]\n },\n {\n \"name\": \"requireCompletion\",\n \"type\": \"boolean\",\n \"label\": \"Require full score for task before proceeding\",\n \"description\": \"For best functionality this option should be used in conjunction with the \\\"Prevent skipping forward in a video\\\" option of Interactive Video.\"\n }\n ]\n },\n {\n \"name\": \"visuals\",\n \"label\": \"Visuals\",\n \"importance\": \"low\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"backgroundColor\",\n \"type\": \"text\",\n \"label\": \"Background color\",\n \"widget\": \"colorSelector\",\n \"default\": \"rgb(255, 255, 255)\",\n \"spectrum\": {\n \"showInput\": true,\n \"showAlpha\": true,\n \"preferredFormat\": \"rgb\",\n \"showPalette\": true,\n \"palette\": [\n [\n \"rgba(0, 0, 0, 0)\"\n ],\n [\n \"rgb(67, 67, 67)\",\n \"rgb(102, 102, 102)\",\n \"rgb(204, 204, 204)\",\n \"rgb(217, 217, 217)\",\n \"rgb(255, 255, 255)\"\n ],\n [\n \"rgb(152, 0, 0)\",\n \"rgb(255, 0, 0)\",\n \"rgb(255, 153, 0)\",\n \"rgb(255, 255, 0)\",\n \"rgb(0, 255, 0)\",\n \"rgb(0, 255, 255)\",\n \"rgb(74, 134, 232)\",\n \"rgb(0, 0, 255)\",\n \"rgb(153, 0, 255)\",\n \"rgb(255, 0, 255)\"\n ],\n [\n \"rgb(230, 184, 175)\",\n \"rgb(244, 204, 204)\",\n \"rgb(252, 229, 205)\",\n \"rgb(255, 242, 204)\",\n \"rgb(217, 234, 211)\",\n \"rgb(208, 224, 227)\",\n \"rgb(201, 218, 248)\",\n \"rgb(207, 226, 243)\",\n \"rgb(217, 210, 233)\",\n \"rgb(234, 209, 220)\",\n \"rgb(221, 126, 107)\",\n \"rgb(234, 153, 153)\",\n \"rgb(249, 203, 156)\",\n \"rgb(255, 229, 153)\",\n \"rgb(182, 215, 168)\",\n \"rgb(162, 196, 201)\",\n \"rgb(164, 194, 244)\",\n \"rgb(159, 197, 232)\",\n \"rgb(180, 167, 214)\",\n \"rgb(213, 166, 189)\",\n \"rgb(204, 65, 37)\",\n \"rgb(224, 102, 102)\",\n \"rgb(246, 178, 107)\",\n \"rgb(255, 217, 102)\",\n \"rgb(147, 196, 125)\",\n \"rgb(118, 165, 175)\",\n \"rgb(109, 158, 235)\",\n \"rgb(111, 168, 220)\",\n \"rgb(142, 124, 195)\",\n \"rgb(194, 123, 160)\",\n \"rgb(166, 28, 0)\",\n \"rgb(204, 0, 0)\",\n \"rgb(230, 145, 56)\",\n \"rgb(241, 194, 50)\",\n \"rgb(106, 168, 79)\",\n \"rgb(69, 129, 142)\",\n \"rgb(60, 120, 216)\",\n \"rgb(61, 133, 198)\",\n \"rgb(103, 78, 167)\",\n \"rgb(166, 77, 121)\",\n \"rgb(91, 15, 0)\",\n \"rgb(102, 0, 0)\",\n \"rgb(120, 63, 4)\",\n \"rgb(127, 96, 0)\",\n \"rgb(39, 78, 19)\",\n \"rgb(12, 52, 61)\",\n \"rgb(28, 69, 135)\",\n \"rgb(7, 55, 99)\",\n \"rgb(32, 18, 77)\",\n \"rgb(76, 17, 48)\"\n ]\n ]\n }\n },\n {\n \"name\": \"boxShadow\",\n \"type\": \"boolean\",\n \"label\": \"Box shadow\",\n \"default\": true,\n \"description\": \"Adds a subtle shadow around the interaction. You might want to disable this for completely transparent interactions\"\n }\n ]\n },\n {\n \"name\": \"goto\",\n \"label\": \"Go to on click\",\n \"importance\": \"low\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"type\",\n \"label\": \"Type\",\n \"type\": \"select\",\n \"widget\": \"selectToggleFields\",\n \"options\": [\n {\n \"value\": \"timecode\",\n \"label\": \"Timecode\",\n \"hideFields\": [\n \"url\"\n ]\n },\n {\n \"value\": \"url\",\n \"label\": \"Another page (URL)\",\n \"hideFields\": [\n \"time\"\n ]\n }\n ],\n \"optional\": true\n },\n {\n \"name\": \"time\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Go To\",\n \"description\": \"The target time the user will be taken to upon pressing the hotspot. Enter timecode in the format M:SS.\",\n \"optional\": true\n },\n {\n \"name\": \"url\",\n \"type\": \"group\",\n \"label\": \"URL\",\n \"widget\": \"linkWidget\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"protocol\",\n \"type\": \"select\",\n \"label\": \"Protocol\",\n \"options\": [\n {\n \"value\": \"http:\/\/\",\n \"label\": \"http:\/\/\"\n },\n {\n \"value\": \"https:\/\/\",\n \"label\": \"https:\/\/\"\n },\n {\n \"value\": \"\/\",\n \"label\": \"(root relative)\"\n },\n {\n \"value\": \"other\",\n \"label\": \"other\"\n }\n ],\n \"optional\": true,\n \"default\": \"http:\/\/\"\n },\n {\n \"name\": \"url\",\n \"type\": \"text\",\n \"label\": \"URL\",\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"visualize\",\n \"type\": \"boolean\",\n \"label\": \"Visualize\",\n \"description\": \"Show that interaction can be clicked by adding a border and an icon\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"bookmarks\",\n \"importance\": \"low\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"bookmark\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"time\",\n \"type\": \"number\"\n },\n {\n \"name\": \"label\",\n \"type\": \"text\"\n }\n ]\n }\n },\n {\n \"name\": \"endscreens\",\n \"importance\": \"low\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"endscreen\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"time\",\n \"type\": \"number\"\n },\n {\n \"name\": \"label\",\n \"type\": \"text\"\n }\n ]\n }\n }\n ]\n },\n {\n \"name\": \"summary\",\n \"type\": \"group\",\n \"label\": \"Summary task\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"task\",\n \"type\": \"library\",\n \"options\": [\n \"H5P.Summary 1.10\"\n ],\n \"default\": {\n \"library\": \"H5P.Summary 1.10\",\n \"params\": {}\n }\n },\n {\n \"name\": \"displayAt\",\n \"type\": \"number\",\n \"label\": \"Display at\",\n \"description\": \"Number of seconds before the video ends.\",\n \"default\": 3\n }\n ]\n }\n ]\n },\n {\n \"name\": \"override\",\n \"type\": \"group\",\n \"label\": \"Behavioural settings\",\n \"importance\": \"low\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"startVideoAt\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Start video at\",\n \"importance\": \"low\",\n \"optional\": true,\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"autoplay\",\n \"type\": \"boolean\",\n \"label\": \"Auto-play video\",\n \"default\": false,\n \"optional\": true,\n \"description\": \"Start playing the video automatically\"\n },\n {\n \"name\": \"loop\",\n \"type\": \"boolean\",\n \"label\": \"Loop the video\",\n \"default\": false,\n \"optional\": true,\n \"description\": \"Check if video should run in a loop\"\n },\n {\n \"name\": \"showSolutionButton\",\n \"type\": \"select\",\n \"label\": \"Override \\\"Show Solution\\\" button\",\n \"importance\": \"low\",\n \"description\": \"This option determines if the \\\"Show Solution\\\" button will be shown for all questions, disabled for all or configured for each question individually.\",\n \"optional\": true,\n \"options\": [\n {\n \"value\": \"on\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"off\",\n \"label\": \"Disabled\"\n }\n ]\n },\n {\n \"name\": \"retryButton\",\n \"type\": \"select\",\n \"label\": \"Override \\\"Retry\\\" button\",\n \"importance\": \"low\",\n \"description\": \"This option determines if the \\\"Retry\\\" button will be shown for all questions, disabled for all or configured for each question individually.\",\n \"optional\": true,\n \"options\": [\n {\n \"value\": \"on\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"off\",\n \"label\": \"Disabled\"\n }\n ]\n },\n {\n \"name\": \"showBookmarksmenuOnLoad\",\n \"type\": \"boolean\",\n \"label\": \"Start with bookmarks menu open\",\n \"importance\": \"low\",\n \"default\": false,\n \"description\": \"This function is not available on iPad when using YouTube as video source.\"\n },\n {\n \"name\": \"showRewind10\",\n \"type\": \"boolean\",\n \"label\": \"Show button for rewinding 10 seconds\",\n \"importance\": \"low\",\n \"default\": false\n },\n {\n \"name\": \"preventSkipping\",\n \"type\": \"boolean\",\n \"default\": false,\n \"label\": \"Prevent skipping forward in a video\",\n \"importance\": \"low\",\n \"description\": \"Enabling this options will disable user video navigation through default controls.\"\n },\n {\n \"name\": \"deactivateSound\",\n \"type\": \"boolean\",\n \"default\": false,\n \"label\": \"Deactivate sound\",\n \"importance\": \"low\",\n \"description\": \"Enabling this option will deactivate the video's sound and prevent it from being switched on.\"\n }\n ]\n },\n {\n \"name\": \"l10n\",\n \"type\": \"group\",\n \"label\": \"Localize\",\n \"importance\": \"low\",\n \"common\": true,\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"interaction\",\n \"type\": \"text\",\n \"label\": \"Interaction title\",\n \"importance\": \"low\",\n \"default\": \"Interaction\",\n \"optional\": true\n },\n {\n \"name\": \"play\",\n \"type\": \"text\",\n \"label\": \"Play title\",\n \"importance\": \"low\",\n \"default\": \"Play\",\n \"optional\": true\n },\n {\n \"name\": \"pause\",\n \"type\": \"text\",\n \"label\": \"Pause title\",\n \"importance\": \"low\",\n \"default\": \"Pause\",\n \"optional\": true\n },\n {\n \"name\": \"mute\",\n \"type\": \"text\",\n \"label\": \"Mute title\",\n \"importance\": \"low\",\n \"default\": \"Mute\",\n \"optional\": true\n },\n {\n \"name\": \"unmute\",\n \"type\": \"text\",\n \"label\": \"Unmute title\",\n \"importance\": \"low\",\n \"default\": \"Unmute\",\n \"optional\": true\n },\n {\n \"name\": \"quality\",\n \"type\": \"text\",\n \"label\": \"Video quality title\",\n \"importance\": \"low\",\n \"default\": \"Video Quality\",\n \"optional\": true\n },\n {\n \"name\": \"captions\",\n \"type\": \"text\",\n \"label\": \"Video captions title\",\n \"importance\": \"low\",\n \"default\": \"Captions\",\n \"optional\": true\n },\n {\n \"name\": \"close\",\n \"type\": \"text\",\n \"label\": \"Close button text\",\n \"importance\": \"low\",\n \"default\": \"Close\",\n \"optional\": true\n },\n {\n \"name\": \"fullscreen\",\n \"type\": \"text\",\n \"label\": \"Fullscreen title\",\n \"importance\": \"low\",\n \"default\": \"Fullscreen\",\n \"optional\": true\n },\n {\n \"name\": \"exitFullscreen\",\n \"type\": \"text\",\n \"label\": \"Exit fullscreen title\",\n \"importance\": \"low\",\n \"default\": \"Exit Fullscreen\",\n \"optional\": true\n },\n {\n \"name\": \"summary\",\n \"type\": \"text\",\n \"label\": \"Summary title\",\n \"importance\": \"low\",\n \"default\": \"Open summary dialog\",\n \"optional\": true\n },\n {\n \"name\": \"bookmarks\",\n \"type\": \"text\",\n \"label\": \"Bookmarks title\",\n \"importance\": \"low\",\n \"default\": \"Bookmarks\",\n \"optional\": true\n },\n {\n \"name\": \"endscreen\",\n \"type\": \"text\",\n \"label\": \"Submit screen title\",\n \"importance\": \"low\",\n \"default\": \"Submit screen\",\n \"optional\": true\n },\n {\n \"name\": \"defaultAdaptivitySeekLabel\",\n \"type\": \"text\",\n \"label\": \"Default label for adaptivity seek button\",\n \"importance\": \"low\",\n \"default\": \"Continue\",\n \"optional\": true\n },\n {\n \"name\": \"continueWithVideo\",\n \"type\": \"text\",\n \"label\": \"Default label for continue video button\",\n \"importance\": \"low\",\n \"default\": \"Continue with video\",\n \"optional\": true\n },\n {\n \"name\": \"playbackRate\",\n \"type\": \"text\",\n \"label\": \"Set playback rate\",\n \"importance\": \"low\",\n \"default\": \"Playback Rate\",\n \"optional\": true\n },\n {\n \"name\": \"rewind10\",\n \"type\": \"text\",\n \"label\": \"Rewind 10 Seconds\",\n \"importance\": \"low\",\n \"default\": \"Rewind 10 Seconds\",\n \"optional\": true\n },\n {\n \"name\": \"navDisabled\",\n \"type\": \"text\",\n \"label\": \"Navigation is disabled text\",\n \"importance\": \"low\",\n \"default\": \"Navigation is disabled\",\n \"optional\": true\n },\n {\n \"name\": \"sndDisabled\",\n \"type\": \"text\",\n \"label\": \"Sound is disabled text\",\n \"importance\": \"low\",\n \"default\": \"Sound is disabled\",\n \"optional\": true\n },\n {\n \"name\": \"requiresCompletionWarning\",\n \"type\": \"text\",\n \"label\": \"Warning that the user must answer the question correctly before continuing\",\n \"importance\": \"low\",\n \"default\": \"You need to answer all the questions correctly before continuing.\",\n \"optional\": true\n },\n {\n \"name\": \"back\",\n \"type\": \"text\",\n \"label\": \"Back button\",\n \"importance\": \"low\",\n \"default\": \"Back\",\n \"optional\": true\n },\n {\n \"name\": \"hours\",\n \"type\": \"text\",\n \"label\": \"Passed time hours\",\n \"importance\": \"low\",\n \"default\": \"Hours\",\n \"optional\": true\n },\n {\n \"name\": \"minutes\",\n \"type\": \"text\",\n \"label\": \"Passed time minutes\",\n \"importance\": \"low\",\n \"default\": \"Minutes\",\n \"optional\": true\n },\n {\n \"name\": \"seconds\",\n \"type\": \"text\",\n \"label\": \"Passed time seconds\",\n \"importance\": \"low\",\n \"default\": \"Seconds\",\n \"optional\": true\n },\n {\n \"name\": \"currentTime\",\n \"type\": \"text\",\n \"label\": \"Label for current time\",\n \"importance\": \"low\",\n \"default\": \"Current time:\",\n \"optional\": true\n },\n {\n \"name\": \"totalTime\",\n \"type\": \"text\",\n \"label\": \"Label for total time\",\n \"importance\": \"low\",\n \"default\": \"Total time:\",\n \"optional\": true\n },\n {\n \"name\": \"singleInteractionAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Text explaining that a single interaction with a name has come into view\",\n \"importance\": \"low\",\n \"default\": \"Interaction appeared:\",\n \"optional\": true\n },\n {\n \"name\": \"multipleInteractionsAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Text for explaining that multiple interactions have come into view\",\n \"importance\": \"low\",\n \"default\": \"Multiple interactions appeared.\",\n \"optional\": true\n },\n {\n \"name\": \"videoPausedAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Video is paused announcement\",\n \"importance\": \"low\",\n \"default\": \"Video is paused\",\n \"optional\": true\n },\n {\n \"name\": \"content\",\n \"type\": \"text\",\n \"label\": \"Content label\",\n \"importance\": \"low\",\n \"default\": \"Content\",\n \"optional\": true\n },\n {\n \"name\": \"answered\",\n \"type\": \"text\",\n \"label\": \"Answered message (@answered will be replaced with the number of answered questions)\",\n \"importance\": \"low\",\n \"default\": \"@answered answered\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTitle\",\n \"type\": \"text\",\n \"label\": \"Submit screen title\",\n \"importance\": \"low\",\n \"default\": \"@answered Question(s) answered\",\n \"description\": \"@answered will be replaced by the number of answered questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformation\",\n \"type\": \"text\",\n \"label\": \"Submit screen information\",\n \"importance\": \"low\",\n \"default\": \"You have answered @answered questions, click below to submit your answers.\",\n \"description\": \"@answered will be replaced by the number of answered questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformationNoAnswers\",\n \"type\": \"text\",\n \"label\": \"Submit screen information for missing answers\",\n \"importance\": \"low\",\n \"default\": \"You have not answered any questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformationMustHaveAnswer\",\n \"type\": \"text\",\n \"label\": \"Submit screen information for answer needed\",\n \"importance\": \"low\",\n \"default\": \"You have to answer at least one question before you can submit your answers.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardSubmitButton\",\n \"type\": \"text\",\n \"label\": \"Submit screen submit button\",\n \"importance\": \"low\",\n \"default\": \"Submit Answers\",\n \"optional\": true\n },\n {\n \"name\": \"endcardSubmitMessage\",\n \"type\": \"text\",\n \"label\": \"Submit screen submit message\",\n \"importance\": \"low\",\n \"default\": \"Your answers have been submitted!\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTableRowAnswered\",\n \"type\": \"text\",\n \"label\": \"Submit screen table row title: Answered questions\",\n \"importance\": \"low\",\n \"default\": \"Answered questions\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTableRowScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen table row title: Score\",\n \"importance\": \"low\",\n \"default\": \"Score\",\n \"optional\": true\n },\n {\n \"name\": \"endcardAnsweredScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen answered score\",\n \"importance\": \"low\",\n \"default\": \"answered\",\n \"optional\": true\n },\n {\n \"name\": \"endCardTableRowSummaryWithScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen row summary including score (for readspeakers)\",\n \"importance\": \"low\",\n \"default\": \"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\n \"optional\": true\n },\n {\n \"name\": \"endCardTableRowSummaryWithoutScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen row summary for no score (for readspeakers)\",\n \"importance\": \"low\",\n \"default\": \"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\",\n \"optional\": true\n }\n ]\n }\n]", - "tutorial_url": "", - "has_icon": 1 - }, - "created_at": "2020-09-30T20:24:58.000000Z", - "updated_at": "2020-09-30T20:24:58.000000Z" + "data": [ + { + "id": 10, + "organization_id": 1, + "organization_visibility_type_id": 1, + "name": "project 1", + "description": "test fffff rrrr", + "thumb_url": "", + "shared": true, + "starter_project": false, + "order": 2, + "status": 1, + "status_text": "DRAFT", + "indexing": null, + "is_user_starter": false, + "indexing_text": "NOT REQUESTED", + "created_at": "2021-08-17T11:15:58.000000Z", + "updated_at": "2021-08-17T11:15:58.000000Z", + "users": [ + { + "id": 1, + "name": "Test User", + "email": "test@test.com", + "email_verified_at": "2021-03-05T15:53:34.000000Z", + "created_at": null, + "updated_at": null, + "first_name": "Test", + "last_name": "User", + "organization_name": null, + "job_title": null, + "address": null, + "phone_number": null, + "organization_type": null, + "website": null, + "deleted_at": null, + "role": null, + "gapi_access_token": null, + "hubspot": false, + "subscribed": false, + "subscribed_ip": null, + "membership_type_id": 2, + "pivot": { + "project_id": 10, + "user_id": 1, + "role": "owner", + "created_at": "2021-08-17T11:15:58.000000Z", + "updated_at": "2021-08-17T11:15:58.000000Z" + } + } + ], + "team": { + "id": 63, + "name": "Team Test One", + "created_at": "2021-08-17T11:15:57.000000Z", + "updated_at": "2021-08-17T11:15:57.000000Z", + "deleted_at": null, + "description": "desc", + "indexing": null, + "organization_id": 1, + "original_user": null + } }, - "created_at": "2020-09-30T20:24:58.000000Z", - "updated_at": "2020-09-30T20:24:58.000000Z" + { + "id": 11, + "organization_id": 1, + "organization_visibility_type_id": 1, + "name": "The Science of Golf", + "description": "Uncover the science, technology, engineering, and mathematics behind the game of golf.", + "thumb_url": "", + "shared": true, + "starter_project": false, + "order": 2, + "status": 1, + "status_text": "DRAFT", + "indexing": null, + "is_user_starter": false, + "indexing_text": "NOT REQUESTED", + "created_at": "2021-08-17T11:21:09.000000Z", + "updated_at": "2021-08-23T17:17:46.000000Z", + "users": [ + { + "id": 1, + "name": "Test User 2", + "email": "test2@test.com", + "email_verified_at": "2021-03-05T15:53:34.000000Z", + "created_at": null, + "updated_at": null, + "first_name": "Test", + "last_name": "User 2", + "organization_name": null, + "job_title": null, + "address": null, + "phone_number": null, + "organization_type": null, + "website": null, + "deleted_at": null, + "role": null, + "gapi_access_token": null, + "hubspot": false, + "subscribed": false, + "subscribed_ip": null, + "membership_type_id": 2, + "pivot": { + "project_id": 11, + "user_id": 1, + "role": "owner", + "created_at": "2021-08-17T11:21:09.000000Z", + "updated_at": "2021-08-17T11:21:09.000000Z" + } + } + ], + "team": { + "id": 64, + "name": "Team 2 Test", + "created_at": "2021-08-17T11:21:08.000000Z", + "updated_at": "2021-08-17T11:21:08.000000Z", + "deleted_at": null, + "description": "desc", + "indexing": null, + "organization_id": 2, + "original_user": null + } + } + ], + "links": { + "first": "http:\/\/localhost:8000\/api\/v1\/suborganization\/1\/team-projects?page=1", + "last": "http:\/\/localhost:8000\/api\/v1\/suborganization\/1\/team-projects?page=1", + "prev": null, + "next": null + }, + "meta": { + "current_page": 1, + "from": 1, + "last_page": 1, + "path": "http:\/\/localhost:8000\/api\/v1\/suborganization\/1\/team-projects", + "per_page": 10, + "to": 2, + "total": 2 } } ``` ### HTTP Request -`GET api/v1/activities/{activity}/share` +`GET api/v1/suborganization/{suborganization}/team-projects` #### URL Parameters Parameter | Status | Description --------- | ------- | ------- | ------- - `activity` | required | The Id of a activity + `suborganization` | required | The Id of a suborganization - + + + +## Get All Projects of login user + +Get a list of the projects of a user. - -## api/v1/activities/update-order > Example request: ```bash curl -X GET \ - -G "http://localhost:8082/api/api/v1/activities/update-order" \ + -G "http://localhost:8000/api/v1/suborganization/1/projects?optional=size%2C+order_by_type%2C+order_by_column8" \ -H "Content-Type: application/json" \ -H "Accept: application/json" ``` ```javascript const url = new URL( - "http://localhost:8082/api/api/v1/activities/update-order" + "http://localhost:8000/api/v1/suborganization/1/projects" ); +let params = { + "optional": "size, order_by_type, order_by_column8", +}; +Object.keys(params) + .forEach(key => url.searchParams.append(key, params[key])); + let headers = { "Content-Type": "application/json", "Accept": "application/json", @@ -6322,12 +6126,15 @@ fetch(url, { $client = new \GuzzleHttp\Client(); $response = $client->get( - 'http://localhost:8082/api/api/v1/activities/update-order', + 'http://localhost:8000/api/v1/suborganization/1/projects', [ 'headers' => [ 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], + 'query' => [ + 'optional'=> 'size, order_by_type, order_by_column8', + ], ] ); $body = $response->getBody(); @@ -6338,47 +6145,91 @@ print_r(json_decode((string) $body)); import requests import json -url = 'http://localhost:8082/api/api/v1/activities/update-order' +url = 'http://localhost:8000/api/v1/suborganization/1/projects' +params = { + 'optional': 'size, order_by_type, order_by_column8', +} headers = { 'Content-Type': 'application/json', 'Accept': 'application/json' } -response = requests.request('GET', url, headers=headers) +response = requests.request('GET', url, headers=headers, params=params) response.json() ``` -> Example response (401): +> Example response (200): + +```json +null +``` +> Example response (200): ```json { - "message": "Unauthenticated." + "projects": [ + { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "is_public": true, + "gcr_project_visibility": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + { + "id": 2, + "name": "Math Project", + "description": "This is a test math project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832384", + "shared": true, + "starter_project": null, + "is_public": true, + "created_at": "2020-09-07T19:21:08.000000Z", + "updated_at": "2020-09-07T19:21:08.000000Z" + } + ] } ``` ### HTTP Request -`GET api/v1/activities/update-order` +`GET api/v1/suborganization/{suborganization}/projects` +#### URL Parameters - +Parameter | Status | Description +--------- | ------- | ------- | ------- + `required` | optional | Organization $suborganization. +#### Query Parameters - -## Remove Share Activity +Parameter | Status | Description +--------- | ------- | ------- | ----------- + `optional` | optional | GetProjectsRequest $request. -Remove share the specified activity. + + + +## Create Project + +Create a new project in storage for a user. > Example request: ```bash -curl -X GET \ - -G "http://localhost:8082/api/api/v1/activities/1/remove-share" \ +curl -X POST \ + "http://localhost:8000/api/v1/suborganization/1/projects" \ -H "Content-Type: application/json" \ - -H "Accept: application/json" + -H "Accept: application/json" \ + -d '{"name":"Test Project","description":"This is a test project.","thumb_url":"https:\/\/images.pexels.com\/photos\/2832382","organization_visibility_type_id":1}' + ``` ```javascript const url = new URL( - "http://localhost:8082/api/api/v1/activities/1/remove-share" + "http://localhost:8000/api/v1/suborganization/1/projects" ); let headers = { @@ -6386,9 +6237,17 @@ let headers = { "Accept": "application/json", }; +let body = { + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "organization_visibility_type_id": 1 +} + fetch(url, { - method: "GET", + method: "POST", headers: headers, + body: body }) .then(response => response.json()) .then(json => console.log(json)); @@ -6397,13 +6256,19 @@ fetch(url, { ```php $client = new \GuzzleHttp\Client(); -$response = $client->get( - 'http://localhost:8082/api/api/v1/activities/1/remove-share', +$response = $client->post( + 'http://localhost:8000/api/v1/suborganization/1/projects', [ 'headers' => [ 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], + 'json' => [ + 'name' => 'Test Project', + 'description' => 'This is a test project.', + 'thumb_url' => 'https://images.pexels.com/photos/2832382', + 'organization_visibility_type_id' => 1, + ], ] ); $body = $response->getBody(); @@ -6414,12 +6279,18 @@ print_r(json_decode((string) $body)); import requests import json -url = 'http://localhost:8082/api/api/v1/activities/1/remove-share' +url = 'http://localhost:8000/api/v1/suborganization/1/projects' +payload = { + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "organization_visibility_type_id": 1 +} headers = { 'Content-Type': 'application/json', 'Accept': 'application/json' } -response = requests.request('GET', url, headers=headers) +response = requests.request('POST', url, headers=headers, json=payload) response.json() ``` @@ -6429,103 +6300,70 @@ response.json() ```json { "errors": [ - "Failed to remove share activity." + "Could not create project. Please try again later." ] } ``` -> Example response (200): +> Example response (201): ```json { - "activity": { + "project": { "id": 1, - "playlist_id": 1, - "title": "Science of Golf: Why Balls Have Dimples", - "type": "h5p", - "content": "", + "organization_id": 1, + "organization_visibility_type_id": 4, + "name": "The Science of Golf", + "description": "Uncover the science, technology, engineering, and mathematics behind the game of golf.", + "thumb_url": "\/storage\/uploads\/nN5y8v8zh2ghxrKuHCv5wvJOREFw0Nr27s2DPxWq.png", "shared": false, - "order": 2, - "thumb_url": null, - "subject_id": null, - "education_level_id": null, - "h5p_content": { - "id": 59, - "user_id": 1, - "title": "Science of Golf: Why Balls Have Dimples", - "library_id": 40, - "parameters": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"},\"aspectRatio\":\"16:9\"}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\"
Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\"
They reduce wind resistance.<\/p>\\n\",\"
They make the ball more visually interesting.<\/p>\\n\",\"
They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\"
A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\"
A low pressure zone, which is what causes drag.<\/p>\\n\",\"
The ball has no spin.<\/p>\\n\",\"
The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Smooth Ball<\/p>\\n\"}],\"bookmarks\":[],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}", - "filtered": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"}}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\"
Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\"
They reduce wind resistance.<\/p>\\n\",\"
They make the ball more visually interesting.<\/p>\\n\",\"
They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\"
A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\"
A low pressure zone, which is what causes drag.<\/p>\\n\",\"
The ball has no spin.<\/p>\\n\",\"
The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Smooth Ball<\/p>\\n\"}],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}", - "slug": "science-of-golf-why-balls-have-dimples", - "embed_type": "div", - "disable": 9, - "content_type": null, - "authors": null, - "source": null, - "year_from": null, - "year_to": null, - "license": "U", - "license_version": null, - "license_extras": null, - "author_comments": null, - "changes": null, - "default_language": null, - "library": { - "id": 40, - "created_at": null, - "updated_at": null, - "name": "H5P.InteractiveVideo", - "title": "Interactive Video", - "major_version": 1, - "minor_version": 21, - "patch_version": 9, - "runnable": 1, - "restricted": 0, - "fullscreen": 1, - "embed_types": "iframe", - "preloaded_js": "dist\/h5p-interactive-video.js", - "preloaded_css": "dist\/h5p-interactive-video.css", - "drop_library_css": "", - "semantics": "[\n {\n \"name\": \"interactiveVideo\",\n \"type\": \"group\",\n \"widget\": \"wizard\",\n \"label\": \"Interactive Video Editor\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"video\",\n \"type\": \"group\",\n \"label\": \"Upload\/embed video\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"files\",\n \"type\": \"video\",\n \"label\": \"Add a video\",\n \"importance\": \"high\",\n \"description\": \"Click below to add a video you wish to use in your interactive video. You can add a video link or upload video files. It is possible to add several versions of the video with different qualities. To ensure maximum support in browsers at least add a version in webm and mp4 formats.\",\n \"extraAttributes\": [\n \"metadata\"\n ],\n \"enableCustomQualityLabel\": true\n },\n {\n \"name\": \"startScreenOptions\",\n \"type\": \"group\",\n \"label\": \"Start screen options (unsupported for YouTube videos)\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"title\",\n \"type\": \"text\",\n \"label\": \"The title of this interactive video\",\n \"importance\": \"low\",\n \"maxLength\": 60,\n \"default\": \"Interactive Video\",\n \"description\": \"Used in summaries, statistics etc.\"\n },\n {\n \"name\": \"hideStartTitle\",\n \"type\": \"boolean\",\n \"label\": \"Hide title on video start screen\",\n \"importance\": \"low\",\n \"optional\": true,\n \"default\": false\n },\n {\n \"name\": \"shortStartDescription\",\n \"type\": \"text\",\n \"label\": \"Short description (Optional)\",\n \"importance\": \"low\",\n \"optional\": true,\n \"maxLength\": 120,\n \"description\": \"Optional. Display a short description text on the video start screen. Does not work for YouTube videos.\"\n },\n {\n \"name\": \"poster\",\n \"type\": \"image\",\n \"label\": \"Poster image\",\n \"importance\": \"low\",\n \"optional\": true,\n \"description\": \"Image displayed before the user launches the video. Does not work for YouTube Videos.\"\n }\n ]\n },\n {\n \"name\": \"textTracks\",\n \"type\": \"group\",\n \"label\": \"Text tracks (unsupported for YouTube videos)\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"videoTrack\",\n \"type\": \"list\",\n \"label\": \"Available text tracks\",\n \"importance\": \"low\",\n \"optional\": true,\n \"entity\": \"Track\",\n \"min\": 0,\n \"defaultNum\": 1,\n \"field\": {\n \"name\": \"track\",\n \"type\": \"group\",\n \"label\": \"Track\",\n \"importance\": \"low\",\n \"expanded\": false,\n \"fields\": [\n {\n \"name\": \"label\",\n \"type\": \"text\",\n \"label\": \"Track label\",\n \"description\": \"Used if you offer multiple tracks and the user has to choose a track. For instance 'Spanish subtitles' could be the label of a Spanish subtitle track.\",\n \"importance\": \"low\",\n \"default\": \"Subtitles\",\n \"optional\": true\n },\n {\n \"name\": \"kind\",\n \"type\": \"select\",\n \"label\": \"Type of text track\",\n \"importance\": \"low\",\n \"default\": \"subtitles\",\n \"options\": [\n {\n \"value\": \"subtitles\",\n \"label\": \"Subtitles\"\n },\n {\n \"value\": \"captions\",\n \"label\": \"Captions\"\n },\n {\n \"value\": \"descriptions\",\n \"label\": \"Descriptions\"\n }\n ]\n },\n {\n \"name\": \"srcLang\",\n \"type\": \"text\",\n \"label\": \"Source language, must be defined for subtitles\",\n \"importance\": \"low\",\n \"default\": \"en\",\n \"description\": \"Must be a valid BCP 47 language tag. If 'Subtitles' is the type of text track selected, the source language of the track must be defined.\"\n },\n {\n \"name\": \"track\",\n \"type\": \"file\",\n \"label\": \"Track source (WebVTT file)\",\n \"importance\": \"low\"\n }\n ]\n }\n },\n {\n \"name\": \"defaultTrackLabel\",\n \"type\": \"text\",\n \"label\": \"Default text track\",\n \"description\": \"If left empty or not matching any of the text tracks the first text track will be used as the default.\",\n \"importance\": \"low\",\n \"optional\": true\n }\n ]\n }\n ]\n },\n {\n \"name\": \"assets\",\n \"type\": \"group\",\n \"label\": \"Add interactions\",\n \"importance\": \"high\",\n \"widget\": \"interactiveVideo\",\n \"video\": \"video\/files\",\n \"poster\": \"video\/startScreenOptions\/poster\",\n \"fields\": [\n {\n \"name\": \"interactions\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"interaction\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"duration\",\n \"type\": \"group\",\n \"widget\": \"duration\",\n \"label\": \"Display time\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"from\",\n \"type\": \"number\"\n },\n {\n \"name\": \"to\",\n \"type\": \"number\"\n }\n ]\n },\n {\n \"name\": \"pause\",\n \"label\": \"Pause video\",\n \"importance\": \"low\",\n \"type\": \"boolean\"\n },\n {\n \"name\": \"displayType\",\n \"label\": \"Display as\",\n \"importance\": \"low\",\n \"description\": \"Button<\/b> is a collapsed interaction the user must press to open. Poster<\/b> is an expanded interaction displayed directly on top of the video\",\n \"type\": \"select\",\n \"widget\": \"imageRadioButtonGroup\",\n \"options\": [\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"poster\",\n \"label\": \"Poster\"\n }\n ],\n \"default\": \"button\"\n },\n {\n \"name\": \"buttonOnMobile\",\n \"label\": \"Turn into button on small screens\",\n \"importance\": \"low\",\n \"type\": \"boolean\",\n \"default\": false\n },\n {\n \"name\": \"label\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"label\": \"Label\",\n \"importance\": \"low\",\n \"description\": \"Label displayed next to interaction icon.\",\n \"optional\": true,\n \"enterMode\": \"p\",\n \"tags\": [\n \"p\"\n ]\n },\n {\n \"name\": \"x\",\n \"type\": \"number\",\n \"importance\": \"low\",\n \"widget\": \"none\"\n },\n {\n \"name\": \"y\",\n \"type\": \"number\",\n \"importance\": \"low\",\n \"widget\": \"none\"\n },\n {\n \"name\": \"width\",\n \"type\": \"number\",\n \"widget\": \"none\",\n \"importance\": \"low\",\n \"optional\": true\n },\n {\n \"name\": \"height\",\n \"type\": \"number\",\n \"widget\": \"none\",\n \"importance\": \"low\",\n \"optional\": true\n },\n {\n \"name\": \"libraryTitle\",\n \"type\": \"text\",\n \"importance\": \"low\",\n \"optional\": true,\n \"widget\": \"none\"\n },\n {\n \"name\": \"action\",\n \"type\": \"library\",\n \"importance\": \"low\",\n \"options\": [\n \"H5P.Nil 1.0\",\n \"H5P.Text 1.1\",\n \"H5P.Table 1.1\",\n \"H5P.Link 1.3\",\n \"H5P.Image 1.1\",\n \"H5P.Summary 1.10\",\n \"H5P.SingleChoiceSet 1.11\",\n \"H5P.MultiChoice 1.14\",\n \"H5P.TrueFalse 1.6\",\n \"H5P.Blanks 1.12\",\n \"H5P.DragQuestion 1.13\",\n \"H5P.MarkTheWords 1.9\",\n \"H5P.DragText 1.8\",\n \"H5P.GoToQuestion 1.3\",\n \"H5P.IVHotspot 1.2\",\n \"H5P.Questionnaire 1.2\",\n \"H5P.FreeTextQuestion 1.0\"\n ]\n },\n {\n \"name\": \"adaptivity\",\n \"type\": \"group\",\n \"label\": \"Adaptivity\",\n \"importance\": \"low\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"correct\",\n \"type\": \"group\",\n \"label\": \"Action on all correct\",\n \"fields\": [\n {\n \"name\": \"seekTo\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Seek to\",\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"allowOptOut\",\n \"type\": \"boolean\",\n \"label\": \"Allow the user to opt out and continue\"\n },\n {\n \"name\": \"message\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"enterMode\": \"p\",\n \"tags\": [\n \"strong\",\n \"em\",\n \"del\",\n \"a\",\n \"code\"\n ],\n \"label\": \"Message\"\n },\n {\n \"name\": \"seekLabel\",\n \"type\": \"text\",\n \"label\": \"Label for seek button\"\n }\n ]\n },\n {\n \"name\": \"wrong\",\n \"type\": \"group\",\n \"label\": \"Action on wrong\",\n \"fields\": [\n {\n \"name\": \"seekTo\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Seek to\",\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"allowOptOut\",\n \"type\": \"boolean\",\n \"label\": \"Allow the user to opt out and continue\"\n },\n {\n \"name\": \"message\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"enterMode\": \"p\",\n \"tags\": [\n \"strong\",\n \"em\",\n \"del\",\n \"a\",\n \"code\"\n ],\n \"label\": \"Message\"\n },\n {\n \"name\": \"seekLabel\",\n \"type\": \"text\",\n \"label\": \"Label for seek button\"\n }\n ]\n },\n {\n \"name\": \"requireCompletion\",\n \"type\": \"boolean\",\n \"label\": \"Require full score for task before proceeding\",\n \"description\": \"For best functionality this option should be used in conjunction with the \\\"Prevent skipping forward in a video\\\" option of Interactive Video.\"\n }\n ]\n },\n {\n \"name\": \"visuals\",\n \"label\": \"Visuals\",\n \"importance\": \"low\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"backgroundColor\",\n \"type\": \"text\",\n \"label\": \"Background color\",\n \"widget\": \"colorSelector\",\n \"default\": \"rgb(255, 255, 255)\",\n \"spectrum\": {\n \"showInput\": true,\n \"showAlpha\": true,\n \"preferredFormat\": \"rgb\",\n \"showPalette\": true,\n \"palette\": [\n [\n \"rgba(0, 0, 0, 0)\"\n ],\n [\n \"rgb(67, 67, 67)\",\n \"rgb(102, 102, 102)\",\n \"rgb(204, 204, 204)\",\n \"rgb(217, 217, 217)\",\n \"rgb(255, 255, 255)\"\n ],\n [\n \"rgb(152, 0, 0)\",\n \"rgb(255, 0, 0)\",\n \"rgb(255, 153, 0)\",\n \"rgb(255, 255, 0)\",\n \"rgb(0, 255, 0)\",\n \"rgb(0, 255, 255)\",\n \"rgb(74, 134, 232)\",\n \"rgb(0, 0, 255)\",\n \"rgb(153, 0, 255)\",\n \"rgb(255, 0, 255)\"\n ],\n [\n \"rgb(230, 184, 175)\",\n \"rgb(244, 204, 204)\",\n \"rgb(252, 229, 205)\",\n \"rgb(255, 242, 204)\",\n \"rgb(217, 234, 211)\",\n \"rgb(208, 224, 227)\",\n \"rgb(201, 218, 248)\",\n \"rgb(207, 226, 243)\",\n \"rgb(217, 210, 233)\",\n \"rgb(234, 209, 220)\",\n \"rgb(221, 126, 107)\",\n \"rgb(234, 153, 153)\",\n \"rgb(249, 203, 156)\",\n \"rgb(255, 229, 153)\",\n \"rgb(182, 215, 168)\",\n \"rgb(162, 196, 201)\",\n \"rgb(164, 194, 244)\",\n \"rgb(159, 197, 232)\",\n \"rgb(180, 167, 214)\",\n \"rgb(213, 166, 189)\",\n \"rgb(204, 65, 37)\",\n \"rgb(224, 102, 102)\",\n \"rgb(246, 178, 107)\",\n \"rgb(255, 217, 102)\",\n \"rgb(147, 196, 125)\",\n \"rgb(118, 165, 175)\",\n \"rgb(109, 158, 235)\",\n \"rgb(111, 168, 220)\",\n \"rgb(142, 124, 195)\",\n \"rgb(194, 123, 160)\",\n \"rgb(166, 28, 0)\",\n \"rgb(204, 0, 0)\",\n \"rgb(230, 145, 56)\",\n \"rgb(241, 194, 50)\",\n \"rgb(106, 168, 79)\",\n \"rgb(69, 129, 142)\",\n \"rgb(60, 120, 216)\",\n \"rgb(61, 133, 198)\",\n \"rgb(103, 78, 167)\",\n \"rgb(166, 77, 121)\",\n \"rgb(91, 15, 0)\",\n \"rgb(102, 0, 0)\",\n \"rgb(120, 63, 4)\",\n \"rgb(127, 96, 0)\",\n \"rgb(39, 78, 19)\",\n \"rgb(12, 52, 61)\",\n \"rgb(28, 69, 135)\",\n \"rgb(7, 55, 99)\",\n \"rgb(32, 18, 77)\",\n \"rgb(76, 17, 48)\"\n ]\n ]\n }\n },\n {\n \"name\": \"boxShadow\",\n \"type\": \"boolean\",\n \"label\": \"Box shadow\",\n \"default\": true,\n \"description\": \"Adds a subtle shadow around the interaction. You might want to disable this for completely transparent interactions\"\n }\n ]\n },\n {\n \"name\": \"goto\",\n \"label\": \"Go to on click\",\n \"importance\": \"low\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"type\",\n \"label\": \"Type\",\n \"type\": \"select\",\n \"widget\": \"selectToggleFields\",\n \"options\": [\n {\n \"value\": \"timecode\",\n \"label\": \"Timecode\",\n \"hideFields\": [\n \"url\"\n ]\n },\n {\n \"value\": \"url\",\n \"label\": \"Another page (URL)\",\n \"hideFields\": [\n \"time\"\n ]\n }\n ],\n \"optional\": true\n },\n {\n \"name\": \"time\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Go To\",\n \"description\": \"The target time the user will be taken to upon pressing the hotspot. Enter timecode in the format M:SS.\",\n \"optional\": true\n },\n {\n \"name\": \"url\",\n \"type\": \"group\",\n \"label\": \"URL\",\n \"widget\": \"linkWidget\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"protocol\",\n \"type\": \"select\",\n \"label\": \"Protocol\",\n \"options\": [\n {\n \"value\": \"http:\/\/\",\n \"label\": \"http:\/\/\"\n },\n {\n \"value\": \"https:\/\/\",\n \"label\": \"https:\/\/\"\n },\n {\n \"value\": \"\/\",\n \"label\": \"(root relative)\"\n },\n {\n \"value\": \"other\",\n \"label\": \"other\"\n }\n ],\n \"optional\": true,\n \"default\": \"http:\/\/\"\n },\n {\n \"name\": \"url\",\n \"type\": \"text\",\n \"label\": \"URL\",\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"visualize\",\n \"type\": \"boolean\",\n \"label\": \"Visualize\",\n \"description\": \"Show that interaction can be clicked by adding a border and an icon\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"bookmarks\",\n \"importance\": \"low\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"bookmark\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"time\",\n \"type\": \"number\"\n },\n {\n \"name\": \"label\",\n \"type\": \"text\"\n }\n ]\n }\n },\n {\n \"name\": \"endscreens\",\n \"importance\": \"low\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"endscreen\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"time\",\n \"type\": \"number\"\n },\n {\n \"name\": \"label\",\n \"type\": \"text\"\n }\n ]\n }\n }\n ]\n },\n {\n \"name\": \"summary\",\n \"type\": \"group\",\n \"label\": \"Summary task\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"task\",\n \"type\": \"library\",\n \"options\": [\n \"H5P.Summary 1.10\"\n ],\n \"default\": {\n \"library\": \"H5P.Summary 1.10\",\n \"params\": {}\n }\n },\n {\n \"name\": \"displayAt\",\n \"type\": \"number\",\n \"label\": \"Display at\",\n \"description\": \"Number of seconds before the video ends.\",\n \"default\": 3\n }\n ]\n }\n ]\n },\n {\n \"name\": \"override\",\n \"type\": \"group\",\n \"label\": \"Behavioural settings\",\n \"importance\": \"low\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"startVideoAt\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Start video at\",\n \"importance\": \"low\",\n \"optional\": true,\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"autoplay\",\n \"type\": \"boolean\",\n \"label\": \"Auto-play video\",\n \"default\": false,\n \"optional\": true,\n \"description\": \"Start playing the video automatically\"\n },\n {\n \"name\": \"loop\",\n \"type\": \"boolean\",\n \"label\": \"Loop the video\",\n \"default\": false,\n \"optional\": true,\n \"description\": \"Check if video should run in a loop\"\n },\n {\n \"name\": \"showSolutionButton\",\n \"type\": \"select\",\n \"label\": \"Override \\\"Show Solution\\\" button\",\n \"importance\": \"low\",\n \"description\": \"This option determines if the \\\"Show Solution\\\" button will be shown for all questions, disabled for all or configured for each question individually.\",\n \"optional\": true,\n \"options\": [\n {\n \"value\": \"on\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"off\",\n \"label\": \"Disabled\"\n }\n ]\n },\n {\n \"name\": \"retryButton\",\n \"type\": \"select\",\n \"label\": \"Override \\\"Retry\\\" button\",\n \"importance\": \"low\",\n \"description\": \"This option determines if the \\\"Retry\\\" button will be shown for all questions, disabled for all or configured for each question individually.\",\n \"optional\": true,\n \"options\": [\n {\n \"value\": \"on\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"off\",\n \"label\": \"Disabled\"\n }\n ]\n },\n {\n \"name\": \"showBookmarksmenuOnLoad\",\n \"type\": \"boolean\",\n \"label\": \"Start with bookmarks menu open\",\n \"importance\": \"low\",\n \"default\": false,\n \"description\": \"This function is not available on iPad when using YouTube as video source.\"\n },\n {\n \"name\": \"showRewind10\",\n \"type\": \"boolean\",\n \"label\": \"Show button for rewinding 10 seconds\",\n \"importance\": \"low\",\n \"default\": false\n },\n {\n \"name\": \"preventSkipping\",\n \"type\": \"boolean\",\n \"default\": false,\n \"label\": \"Prevent skipping forward in a video\",\n \"importance\": \"low\",\n \"description\": \"Enabling this options will disable user video navigation through default controls.\"\n },\n {\n \"name\": \"deactivateSound\",\n \"type\": \"boolean\",\n \"default\": false,\n \"label\": \"Deactivate sound\",\n \"importance\": \"low\",\n \"description\": \"Enabling this option will deactivate the video's sound and prevent it from being switched on.\"\n }\n ]\n },\n {\n \"name\": \"l10n\",\n \"type\": \"group\",\n \"label\": \"Localize\",\n \"importance\": \"low\",\n \"common\": true,\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"interaction\",\n \"type\": \"text\",\n \"label\": \"Interaction title\",\n \"importance\": \"low\",\n \"default\": \"Interaction\",\n \"optional\": true\n },\n {\n \"name\": \"play\",\n \"type\": \"text\",\n \"label\": \"Play title\",\n \"importance\": \"low\",\n \"default\": \"Play\",\n \"optional\": true\n },\n {\n \"name\": \"pause\",\n \"type\": \"text\",\n \"label\": \"Pause title\",\n \"importance\": \"low\",\n \"default\": \"Pause\",\n \"optional\": true\n },\n {\n \"name\": \"mute\",\n \"type\": \"text\",\n \"label\": \"Mute title\",\n \"importance\": \"low\",\n \"default\": \"Mute\",\n \"optional\": true\n },\n {\n \"name\": \"unmute\",\n \"type\": \"text\",\n \"label\": \"Unmute title\",\n \"importance\": \"low\",\n \"default\": \"Unmute\",\n \"optional\": true\n },\n {\n \"name\": \"quality\",\n \"type\": \"text\",\n \"label\": \"Video quality title\",\n \"importance\": \"low\",\n \"default\": \"Video Quality\",\n \"optional\": true\n },\n {\n \"name\": \"captions\",\n \"type\": \"text\",\n \"label\": \"Video captions title\",\n \"importance\": \"low\",\n \"default\": \"Captions\",\n \"optional\": true\n },\n {\n \"name\": \"close\",\n \"type\": \"text\",\n \"label\": \"Close button text\",\n \"importance\": \"low\",\n \"default\": \"Close\",\n \"optional\": true\n },\n {\n \"name\": \"fullscreen\",\n \"type\": \"text\",\n \"label\": \"Fullscreen title\",\n \"importance\": \"low\",\n \"default\": \"Fullscreen\",\n \"optional\": true\n },\n {\n \"name\": \"exitFullscreen\",\n \"type\": \"text\",\n \"label\": \"Exit fullscreen title\",\n \"importance\": \"low\",\n \"default\": \"Exit Fullscreen\",\n \"optional\": true\n },\n {\n \"name\": \"summary\",\n \"type\": \"text\",\n \"label\": \"Summary title\",\n \"importance\": \"low\",\n \"default\": \"Open summary dialog\",\n \"optional\": true\n },\n {\n \"name\": \"bookmarks\",\n \"type\": \"text\",\n \"label\": \"Bookmarks title\",\n \"importance\": \"low\",\n \"default\": \"Bookmarks\",\n \"optional\": true\n },\n {\n \"name\": \"endscreen\",\n \"type\": \"text\",\n \"label\": \"Submit screen title\",\n \"importance\": \"low\",\n \"default\": \"Submit screen\",\n \"optional\": true\n },\n {\n \"name\": \"defaultAdaptivitySeekLabel\",\n \"type\": \"text\",\n \"label\": \"Default label for adaptivity seek button\",\n \"importance\": \"low\",\n \"default\": \"Continue\",\n \"optional\": true\n },\n {\n \"name\": \"continueWithVideo\",\n \"type\": \"text\",\n \"label\": \"Default label for continue video button\",\n \"importance\": \"low\",\n \"default\": \"Continue with video\",\n \"optional\": true\n },\n {\n \"name\": \"playbackRate\",\n \"type\": \"text\",\n \"label\": \"Set playback rate\",\n \"importance\": \"low\",\n \"default\": \"Playback Rate\",\n \"optional\": true\n },\n {\n \"name\": \"rewind10\",\n \"type\": \"text\",\n \"label\": \"Rewind 10 Seconds\",\n \"importance\": \"low\",\n \"default\": \"Rewind 10 Seconds\",\n \"optional\": true\n },\n {\n \"name\": \"navDisabled\",\n \"type\": \"text\",\n \"label\": \"Navigation is disabled text\",\n \"importance\": \"low\",\n \"default\": \"Navigation is disabled\",\n \"optional\": true\n },\n {\n \"name\": \"sndDisabled\",\n \"type\": \"text\",\n \"label\": \"Sound is disabled text\",\n \"importance\": \"low\",\n \"default\": \"Sound is disabled\",\n \"optional\": true\n },\n {\n \"name\": \"requiresCompletionWarning\",\n \"type\": \"text\",\n \"label\": \"Warning that the user must answer the question correctly before continuing\",\n \"importance\": \"low\",\n \"default\": \"You need to answer all the questions correctly before continuing.\",\n \"optional\": true\n },\n {\n \"name\": \"back\",\n \"type\": \"text\",\n \"label\": \"Back button\",\n \"importance\": \"low\",\n \"default\": \"Back\",\n \"optional\": true\n },\n {\n \"name\": \"hours\",\n \"type\": \"text\",\n \"label\": \"Passed time hours\",\n \"importance\": \"low\",\n \"default\": \"Hours\",\n \"optional\": true\n },\n {\n \"name\": \"minutes\",\n \"type\": \"text\",\n \"label\": \"Passed time minutes\",\n \"importance\": \"low\",\n \"default\": \"Minutes\",\n \"optional\": true\n },\n {\n \"name\": \"seconds\",\n \"type\": \"text\",\n \"label\": \"Passed time seconds\",\n \"importance\": \"low\",\n \"default\": \"Seconds\",\n \"optional\": true\n },\n {\n \"name\": \"currentTime\",\n \"type\": \"text\",\n \"label\": \"Label for current time\",\n \"importance\": \"low\",\n \"default\": \"Current time:\",\n \"optional\": true\n },\n {\n \"name\": \"totalTime\",\n \"type\": \"text\",\n \"label\": \"Label for total time\",\n \"importance\": \"low\",\n \"default\": \"Total time:\",\n \"optional\": true\n },\n {\n \"name\": \"singleInteractionAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Text explaining that a single interaction with a name has come into view\",\n \"importance\": \"low\",\n \"default\": \"Interaction appeared:\",\n \"optional\": true\n },\n {\n \"name\": \"multipleInteractionsAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Text for explaining that multiple interactions have come into view\",\n \"importance\": \"low\",\n \"default\": \"Multiple interactions appeared.\",\n \"optional\": true\n },\n {\n \"name\": \"videoPausedAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Video is paused announcement\",\n \"importance\": \"low\",\n \"default\": \"Video is paused\",\n \"optional\": true\n },\n {\n \"name\": \"content\",\n \"type\": \"text\",\n \"label\": \"Content label\",\n \"importance\": \"low\",\n \"default\": \"Content\",\n \"optional\": true\n },\n {\n \"name\": \"answered\",\n \"type\": \"text\",\n \"label\": \"Answered message (@answered will be replaced with the number of answered questions)\",\n \"importance\": \"low\",\n \"default\": \"@answered answered\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTitle\",\n \"type\": \"text\",\n \"label\": \"Submit screen title\",\n \"importance\": \"low\",\n \"default\": \"@answered Question(s) answered\",\n \"description\": \"@answered will be replaced by the number of answered questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformation\",\n \"type\": \"text\",\n \"label\": \"Submit screen information\",\n \"importance\": \"low\",\n \"default\": \"You have answered @answered questions, click below to submit your answers.\",\n \"description\": \"@answered will be replaced by the number of answered questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformationNoAnswers\",\n \"type\": \"text\",\n \"label\": \"Submit screen information for missing answers\",\n \"importance\": \"low\",\n \"default\": \"You have not answered any questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformationMustHaveAnswer\",\n \"type\": \"text\",\n \"label\": \"Submit screen information for answer needed\",\n \"importance\": \"low\",\n \"default\": \"You have to answer at least one question before you can submit your answers.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardSubmitButton\",\n \"type\": \"text\",\n \"label\": \"Submit screen submit button\",\n \"importance\": \"low\",\n \"default\": \"Submit Answers\",\n \"optional\": true\n },\n {\n \"name\": \"endcardSubmitMessage\",\n \"type\": \"text\",\n \"label\": \"Submit screen submit message\",\n \"importance\": \"low\",\n \"default\": \"Your answers have been submitted!\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTableRowAnswered\",\n \"type\": \"text\",\n \"label\": \"Submit screen table row title: Answered questions\",\n \"importance\": \"low\",\n \"default\": \"Answered questions\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTableRowScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen table row title: Score\",\n \"importance\": \"low\",\n \"default\": \"Score\",\n \"optional\": true\n },\n {\n \"name\": \"endcardAnsweredScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen answered score\",\n \"importance\": \"low\",\n \"default\": \"answered\",\n \"optional\": true\n },\n {\n \"name\": \"endCardTableRowSummaryWithScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen row summary including score (for readspeakers)\",\n \"importance\": \"low\",\n \"default\": \"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\n \"optional\": true\n },\n {\n \"name\": \"endCardTableRowSummaryWithoutScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen row summary for no score (for readspeakers)\",\n \"importance\": \"low\",\n \"default\": \"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\",\n \"optional\": true\n }\n ]\n }\n]", - "tutorial_url": "", - "has_icon": 1 - }, - "created_at": "2020-09-30T20:24:58.000000Z", - "updated_at": "2020-09-30T20:24:58.000000Z" - }, - "created_at": "2020-09-30T20:24:58.000000Z", - "updated_at": "2020-09-30T20:24:58.000000Z" + "gcr_project_visibility": true, + "starter_project": false, + "order": null, + "status": 1, + "status_text": "DRAFT", + "indexing": null, + "indexing_text": "NOT REQUESTED", + "created_at": "2020-04-30T20:03:12.000000Z", + "updated_at": "2020-09-17T09:44:27.000000Z" } } ``` ### HTTP Request -`GET api/v1/activities/{activity}/remove-share` +`POST api/v1/suborganization/{suborganization}/projects` #### URL Parameters Parameter | Status | Description --------- | ------- | ------- | ------- - `activity` | required | The Id of a activity - - + `suborganization` | required | The Id of a suborganization +#### Body Parameters +Parameter | Type | Status | Description +--------- | ------- | ------- | ------- | ----------- + `name` | string | required | Name of a project + `description` | string | required | Description of a project + `thumb_url` | string | required | Thumbnail Url of a project + `organization_visibility_type_id` | integer | required | Id of the organization visibility type + + - -## Get Activity Detail + +## Get Project -Get the specified activity in detail. +Get the specified project detail. > Example request: ```bash curl -X GET \ - -G "http://localhost:8082/api/api/v1/activities/1/detail" \ + -G "http://localhost:8000/api/v1/suborganization/1/projects/1" \ -H "Content-Type: application/json" \ -H "Accept: application/json" ``` ```javascript const url = new URL( - "http://localhost:8082/api/api/v1/activities/1/detail" + "http://localhost:8000/api/v1/suborganization/1/projects/1" ); let headers = { @@ -6545,7 +6383,7 @@ fetch(url, { $client = new \GuzzleHttp\Client(); $response = $client->get( - 'http://localhost:8082/api/api/v1/activities/1/detail', + 'http://localhost:8000/api/v1/suborganization/1/projects/1', [ 'headers' => [ 'Content-Type' => 'application/json', @@ -6561,7 +6399,7 @@ print_r(json_decode((string) $body)); import requests import json -url = 'http://localhost:8082/api/api/v1/activities/1/detail' +url = 'http://localhost:8000/api/v1/suborganization/1/projects/1' headers = { 'Content-Type': 'application/json', 'Accept': 'application/json' @@ -6571,131 +6409,496 @@ response.json() ``` -> Example response (200): +> Example response (201): ```json { - "activity": { + "project": { "id": 1, - "playlist": { - "id": 1, - "title": "The Engineering & Design Behind Golf Balls", - "is_public": true, - "order": 0, - "project_id": 1, - "project": { - "id": 1, - "name": "The Science of Golf", - "description": "Uncover the science, technology, engineering, and mathematics behind the game of golf.", - "thumb_url": "\/storage\/projects\/nN5y8v8zh2ghxrKuHCv5wvJOREFw0Nr27s2DPxWq.png", - "starter_project": false, - "shared": false, - "is_public": true, - "users": [ - { - "id": 1, - "email": "john.doe@currikistudio.org", - "first_name": "John", - "last_name": "Doe", - "role": "owner" - } - ], - "created_at": "2020-04-30T20:03:12.000000Z", - "updated_at": "2020-07-11T12:51:07.000000Z" - }, - "created_at": "2020-04-30T20:03:12.000000Z", - "updated_at": "2020-07-11T12:51:07.000000Z" - }, - "title": "Science of Golf: Why Balls Have Dimples", - "type": "h5p", - "content": "", - "shared": false, - "order": 2, - "thumb_url": null, - "subject_id": null, - "education_level_id": null, - "h5p": "{\"params\":{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"}}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\"
Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\"
They reduce wind resistance.<\/p>\\n\",\"
They make the ball more visually interesting.<\/p>\\n\",\"
They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\"
A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\"
A low pressure zone, which is what causes drag.<\/p>\\n\",\"
The ball has no spin.<\/p>\\n\",\"
The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Smooth Ball<\/p>\\n\"}],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}},\"metadata\":{\"title\":\"Science of Golf: Why Balls Have Dimples\",\"license\":\"U\"}}", - "h5p_content": { - "id": 59, - "user_id": 1, - "title": "Science of Golf: Why Balls Have Dimples", - "library_id": 40, - "parameters": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"},\"aspectRatio\":\"16:9\"}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\"
Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\"
They reduce wind resistance.<\/p>\\n\",\"
They make the ball more visually interesting.<\/p>\\n\",\"
They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\"
A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\"
A low pressure zone, which is what causes drag.<\/p>\\n\",\"
The ball has no spin.<\/p>\\n\",\"
The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Smooth Ball<\/p>\\n\"}],\"bookmarks\":[],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}", - "filtered": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"}}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\"
Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\"
They reduce wind resistance.<\/p>\\n\",\"
They make the ball more visually interesting.<\/p>\\n\",\"
They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\"
A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\"
A low pressure zone, which is what causes drag.<\/p>\\n\",\"
The ball has no spin.<\/p>\\n\",\"
The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Smooth Ball<\/p>\\n\"}],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}", - "slug": "science-of-golf-why-balls-have-dimples", - "embed_type": "div", - "disable": 9, - "content_type": null, - "authors": null, - "source": null, - "year_from": null, - "year_to": null, - "license": "U", - "license_version": null, - "license_extras": null, - "author_comments": null, - "changes": null, - "default_language": null, - "library": { - "id": 40, - "created_at": null, - "updated_at": null, - "name": "H5P.InteractiveVideo", - "title": "Interactive Video", - "major_version": 1, - "minor_version": 21, - "patch_version": 9, - "runnable": 1, - "restricted": 0, - "fullscreen": 1, - "embed_types": "iframe", - "preloaded_js": "dist\/h5p-interactive-video.js", - "preloaded_css": "dist\/h5p-interactive-video.css", - "drop_library_css": "", - "semantics": "[\n {\n \"name\": \"interactiveVideo\",\n \"type\": \"group\",\n \"widget\": \"wizard\",\n \"label\": \"Interactive Video Editor\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"video\",\n \"type\": \"group\",\n \"label\": \"Upload\/embed video\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"files\",\n \"type\": \"video\",\n \"label\": \"Add a video\",\n \"importance\": \"high\",\n \"description\": \"Click below to add a video you wish to use in your interactive video. You can add a video link or upload video files. It is possible to add several versions of the video with different qualities. To ensure maximum support in browsers at least add a version in webm and mp4 formats.\",\n \"extraAttributes\": [\n \"metadata\"\n ],\n \"enableCustomQualityLabel\": true\n },\n {\n \"name\": \"startScreenOptions\",\n \"type\": \"group\",\n \"label\": \"Start screen options (unsupported for YouTube videos)\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"title\",\n \"type\": \"text\",\n \"label\": \"The title of this interactive video\",\n \"importance\": \"low\",\n \"maxLength\": 60,\n \"default\": \"Interactive Video\",\n \"description\": \"Used in summaries, statistics etc.\"\n },\n {\n \"name\": \"hideStartTitle\",\n \"type\": \"boolean\",\n \"label\": \"Hide title on video start screen\",\n \"importance\": \"low\",\n \"optional\": true,\n \"default\": false\n },\n {\n \"name\": \"shortStartDescription\",\n \"type\": \"text\",\n \"label\": \"Short description (Optional)\",\n \"importance\": \"low\",\n \"optional\": true,\n \"maxLength\": 120,\n \"description\": \"Optional. Display a short description text on the video start screen. Does not work for YouTube videos.\"\n },\n {\n \"name\": \"poster\",\n \"type\": \"image\",\n \"label\": \"Poster image\",\n \"importance\": \"low\",\n \"optional\": true,\n \"description\": \"Image displayed before the user launches the video. Does not work for YouTube Videos.\"\n }\n ]\n },\n {\n \"name\": \"textTracks\",\n \"type\": \"group\",\n \"label\": \"Text tracks (unsupported for YouTube videos)\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"videoTrack\",\n \"type\": \"list\",\n \"label\": \"Available text tracks\",\n \"importance\": \"low\",\n \"optional\": true,\n \"entity\": \"Track\",\n \"min\": 0,\n \"defaultNum\": 1,\n \"field\": {\n \"name\": \"track\",\n \"type\": \"group\",\n \"label\": \"Track\",\n \"importance\": \"low\",\n \"expanded\": false,\n \"fields\": [\n {\n \"name\": \"label\",\n \"type\": \"text\",\n \"label\": \"Track label\",\n \"description\": \"Used if you offer multiple tracks and the user has to choose a track. For instance 'Spanish subtitles' could be the label of a Spanish subtitle track.\",\n \"importance\": \"low\",\n \"default\": \"Subtitles\",\n \"optional\": true\n },\n {\n \"name\": \"kind\",\n \"type\": \"select\",\n \"label\": \"Type of text track\",\n \"importance\": \"low\",\n \"default\": \"subtitles\",\n \"options\": [\n {\n \"value\": \"subtitles\",\n \"label\": \"Subtitles\"\n },\n {\n \"value\": \"captions\",\n \"label\": \"Captions\"\n },\n {\n \"value\": \"descriptions\",\n \"label\": \"Descriptions\"\n }\n ]\n },\n {\n \"name\": \"srcLang\",\n \"type\": \"text\",\n \"label\": \"Source language, must be defined for subtitles\",\n \"importance\": \"low\",\n \"default\": \"en\",\n \"description\": \"Must be a valid BCP 47 language tag. If 'Subtitles' is the type of text track selected, the source language of the track must be defined.\"\n },\n {\n \"name\": \"track\",\n \"type\": \"file\",\n \"label\": \"Track source (WebVTT file)\",\n \"importance\": \"low\"\n }\n ]\n }\n },\n {\n \"name\": \"defaultTrackLabel\",\n \"type\": \"text\",\n \"label\": \"Default text track\",\n \"description\": \"If left empty or not matching any of the text tracks the first text track will be used as the default.\",\n \"importance\": \"low\",\n \"optional\": true\n }\n ]\n }\n ]\n },\n {\n \"name\": \"assets\",\n \"type\": \"group\",\n \"label\": \"Add interactions\",\n \"importance\": \"high\",\n \"widget\": \"interactiveVideo\",\n \"video\": \"video\/files\",\n \"poster\": \"video\/startScreenOptions\/poster\",\n \"fields\": [\n {\n \"name\": \"interactions\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"interaction\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"duration\",\n \"type\": \"group\",\n \"widget\": \"duration\",\n \"label\": \"Display time\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"from\",\n \"type\": \"number\"\n },\n {\n \"name\": \"to\",\n \"type\": \"number\"\n }\n ]\n },\n {\n \"name\": \"pause\",\n \"label\": \"Pause video\",\n \"importance\": \"low\",\n \"type\": \"boolean\"\n },\n {\n \"name\": \"displayType\",\n \"label\": \"Display as\",\n \"importance\": \"low\",\n \"description\": \"Button<\/b> is a collapsed interaction the user must press to open. Poster<\/b> is an expanded interaction displayed directly on top of the video\",\n \"type\": \"select\",\n \"widget\": \"imageRadioButtonGroup\",\n \"options\": [\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"poster\",\n \"label\": \"Poster\"\n }\n ],\n \"default\": \"button\"\n },\n {\n \"name\": \"buttonOnMobile\",\n \"label\": \"Turn into button on small screens\",\n \"importance\": \"low\",\n \"type\": \"boolean\",\n \"default\": false\n },\n {\n \"name\": \"label\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"label\": \"Label\",\n \"importance\": \"low\",\n \"description\": \"Label displayed next to interaction icon.\",\n \"optional\": true,\n \"enterMode\": \"p\",\n \"tags\": [\n \"p\"\n ]\n },\n {\n \"name\": \"x\",\n \"type\": \"number\",\n \"importance\": \"low\",\n \"widget\": \"none\"\n },\n {\n \"name\": \"y\",\n \"type\": \"number\",\n \"importance\": \"low\",\n \"widget\": \"none\"\n },\n {\n \"name\": \"width\",\n \"type\": \"number\",\n \"widget\": \"none\",\n \"importance\": \"low\",\n \"optional\": true\n },\n {\n \"name\": \"height\",\n \"type\": \"number\",\n \"widget\": \"none\",\n \"importance\": \"low\",\n \"optional\": true\n },\n {\n \"name\": \"libraryTitle\",\n \"type\": \"text\",\n \"importance\": \"low\",\n \"optional\": true,\n \"widget\": \"none\"\n },\n {\n \"name\": \"action\",\n \"type\": \"library\",\n \"importance\": \"low\",\n \"options\": [\n \"H5P.Nil 1.0\",\n \"H5P.Text 1.1\",\n \"H5P.Table 1.1\",\n \"H5P.Link 1.3\",\n \"H5P.Image 1.1\",\n \"H5P.Summary 1.10\",\n \"H5P.SingleChoiceSet 1.11\",\n \"H5P.MultiChoice 1.14\",\n \"H5P.TrueFalse 1.6\",\n \"H5P.Blanks 1.12\",\n \"H5P.DragQuestion 1.13\",\n \"H5P.MarkTheWords 1.9\",\n \"H5P.DragText 1.8\",\n \"H5P.GoToQuestion 1.3\",\n \"H5P.IVHotspot 1.2\",\n \"H5P.Questionnaire 1.2\",\n \"H5P.FreeTextQuestion 1.0\"\n ]\n },\n {\n \"name\": \"adaptivity\",\n \"type\": \"group\",\n \"label\": \"Adaptivity\",\n \"importance\": \"low\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"correct\",\n \"type\": \"group\",\n \"label\": \"Action on all correct\",\n \"fields\": [\n {\n \"name\": \"seekTo\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Seek to\",\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"allowOptOut\",\n \"type\": \"boolean\",\n \"label\": \"Allow the user to opt out and continue\"\n },\n {\n \"name\": \"message\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"enterMode\": \"p\",\n \"tags\": [\n \"strong\",\n \"em\",\n \"del\",\n \"a\",\n \"code\"\n ],\n \"label\": \"Message\"\n },\n {\n \"name\": \"seekLabel\",\n \"type\": \"text\",\n \"label\": \"Label for seek button\"\n }\n ]\n },\n {\n \"name\": \"wrong\",\n \"type\": \"group\",\n \"label\": \"Action on wrong\",\n \"fields\": [\n {\n \"name\": \"seekTo\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Seek to\",\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"allowOptOut\",\n \"type\": \"boolean\",\n \"label\": \"Allow the user to opt out and continue\"\n },\n {\n \"name\": \"message\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"enterMode\": \"p\",\n \"tags\": [\n \"strong\",\n \"em\",\n \"del\",\n \"a\",\n \"code\"\n ],\n \"label\": \"Message\"\n },\n {\n \"name\": \"seekLabel\",\n \"type\": \"text\",\n \"label\": \"Label for seek button\"\n }\n ]\n },\n {\n \"name\": \"requireCompletion\",\n \"type\": \"boolean\",\n \"label\": \"Require full score for task before proceeding\",\n \"description\": \"For best functionality this option should be used in conjunction with the \\\"Prevent skipping forward in a video\\\" option of Interactive Video.\"\n }\n ]\n },\n {\n \"name\": \"visuals\",\n \"label\": \"Visuals\",\n \"importance\": \"low\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"backgroundColor\",\n \"type\": \"text\",\n \"label\": \"Background color\",\n \"widget\": \"colorSelector\",\n \"default\": \"rgb(255, 255, 255)\",\n \"spectrum\": {\n \"showInput\": true,\n \"showAlpha\": true,\n \"preferredFormat\": \"rgb\",\n \"showPalette\": true,\n \"palette\": [\n [\n \"rgba(0, 0, 0, 0)\"\n ],\n [\n \"rgb(67, 67, 67)\",\n \"rgb(102, 102, 102)\",\n \"rgb(204, 204, 204)\",\n \"rgb(217, 217, 217)\",\n \"rgb(255, 255, 255)\"\n ],\n [\n \"rgb(152, 0, 0)\",\n \"rgb(255, 0, 0)\",\n \"rgb(255, 153, 0)\",\n \"rgb(255, 255, 0)\",\n \"rgb(0, 255, 0)\",\n \"rgb(0, 255, 255)\",\n \"rgb(74, 134, 232)\",\n \"rgb(0, 0, 255)\",\n \"rgb(153, 0, 255)\",\n \"rgb(255, 0, 255)\"\n ],\n [\n \"rgb(230, 184, 175)\",\n \"rgb(244, 204, 204)\",\n \"rgb(252, 229, 205)\",\n \"rgb(255, 242, 204)\",\n \"rgb(217, 234, 211)\",\n \"rgb(208, 224, 227)\",\n \"rgb(201, 218, 248)\",\n \"rgb(207, 226, 243)\",\n \"rgb(217, 210, 233)\",\n \"rgb(234, 209, 220)\",\n \"rgb(221, 126, 107)\",\n \"rgb(234, 153, 153)\",\n \"rgb(249, 203, 156)\",\n \"rgb(255, 229, 153)\",\n \"rgb(182, 215, 168)\",\n \"rgb(162, 196, 201)\",\n \"rgb(164, 194, 244)\",\n \"rgb(159, 197, 232)\",\n \"rgb(180, 167, 214)\",\n \"rgb(213, 166, 189)\",\n \"rgb(204, 65, 37)\",\n \"rgb(224, 102, 102)\",\n \"rgb(246, 178, 107)\",\n \"rgb(255, 217, 102)\",\n \"rgb(147, 196, 125)\",\n \"rgb(118, 165, 175)\",\n \"rgb(109, 158, 235)\",\n \"rgb(111, 168, 220)\",\n \"rgb(142, 124, 195)\",\n \"rgb(194, 123, 160)\",\n \"rgb(166, 28, 0)\",\n \"rgb(204, 0, 0)\",\n \"rgb(230, 145, 56)\",\n \"rgb(241, 194, 50)\",\n \"rgb(106, 168, 79)\",\n \"rgb(69, 129, 142)\",\n \"rgb(60, 120, 216)\",\n \"rgb(61, 133, 198)\",\n \"rgb(103, 78, 167)\",\n \"rgb(166, 77, 121)\",\n \"rgb(91, 15, 0)\",\n \"rgb(102, 0, 0)\",\n \"rgb(120, 63, 4)\",\n \"rgb(127, 96, 0)\",\n \"rgb(39, 78, 19)\",\n \"rgb(12, 52, 61)\",\n \"rgb(28, 69, 135)\",\n \"rgb(7, 55, 99)\",\n \"rgb(32, 18, 77)\",\n \"rgb(76, 17, 48)\"\n ]\n ]\n }\n },\n {\n \"name\": \"boxShadow\",\n \"type\": \"boolean\",\n \"label\": \"Box shadow\",\n \"default\": true,\n \"description\": \"Adds a subtle shadow around the interaction. You might want to disable this for completely transparent interactions\"\n }\n ]\n },\n {\n \"name\": \"goto\",\n \"label\": \"Go to on click\",\n \"importance\": \"low\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"type\",\n \"label\": \"Type\",\n \"type\": \"select\",\n \"widget\": \"selectToggleFields\",\n \"options\": [\n {\n \"value\": \"timecode\",\n \"label\": \"Timecode\",\n \"hideFields\": [\n \"url\"\n ]\n },\n {\n \"value\": \"url\",\n \"label\": \"Another page (URL)\",\n \"hideFields\": [\n \"time\"\n ]\n }\n ],\n \"optional\": true\n },\n {\n \"name\": \"time\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Go To\",\n \"description\": \"The target time the user will be taken to upon pressing the hotspot. Enter timecode in the format M:SS.\",\n \"optional\": true\n },\n {\n \"name\": \"url\",\n \"type\": \"group\",\n \"label\": \"URL\",\n \"widget\": \"linkWidget\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"protocol\",\n \"type\": \"select\",\n \"label\": \"Protocol\",\n \"options\": [\n {\n \"value\": \"http:\/\/\",\n \"label\": \"http:\/\/\"\n },\n {\n \"value\": \"https:\/\/\",\n \"label\": \"https:\/\/\"\n },\n {\n \"value\": \"\/\",\n \"label\": \"(root relative)\"\n },\n {\n \"value\": \"other\",\n \"label\": \"other\"\n }\n ],\n \"optional\": true,\n \"default\": \"http:\/\/\"\n },\n {\n \"name\": \"url\",\n \"type\": \"text\",\n \"label\": \"URL\",\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"visualize\",\n \"type\": \"boolean\",\n \"label\": \"Visualize\",\n \"description\": \"Show that interaction can be clicked by adding a border and an icon\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"bookmarks\",\n \"importance\": \"low\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"bookmark\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"time\",\n \"type\": \"number\"\n },\n {\n \"name\": \"label\",\n \"type\": \"text\"\n }\n ]\n }\n },\n {\n \"name\": \"endscreens\",\n \"importance\": \"low\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"endscreen\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"time\",\n \"type\": \"number\"\n },\n {\n \"name\": \"label\",\n \"type\": \"text\"\n }\n ]\n }\n }\n ]\n },\n {\n \"name\": \"summary\",\n \"type\": \"group\",\n \"label\": \"Summary task\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"task\",\n \"type\": \"library\",\n \"options\": [\n \"H5P.Summary 1.10\"\n ],\n \"default\": {\n \"library\": \"H5P.Summary 1.10\",\n \"params\": {}\n }\n },\n {\n \"name\": \"displayAt\",\n \"type\": \"number\",\n \"label\": \"Display at\",\n \"description\": \"Number of seconds before the video ends.\",\n \"default\": 3\n }\n ]\n }\n ]\n },\n {\n \"name\": \"override\",\n \"type\": \"group\",\n \"label\": \"Behavioural settings\",\n \"importance\": \"low\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"startVideoAt\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Start video at\",\n \"importance\": \"low\",\n \"optional\": true,\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"autoplay\",\n \"type\": \"boolean\",\n \"label\": \"Auto-play video\",\n \"default\": false,\n \"optional\": true,\n \"description\": \"Start playing the video automatically\"\n },\n {\n \"name\": \"loop\",\n \"type\": \"boolean\",\n \"label\": \"Loop the video\",\n \"default\": false,\n \"optional\": true,\n \"description\": \"Check if video should run in a loop\"\n },\n {\n \"name\": \"showSolutionButton\",\n \"type\": \"select\",\n \"label\": \"Override \\\"Show Solution\\\" button\",\n \"importance\": \"low\",\n \"description\": \"This option determines if the \\\"Show Solution\\\" button will be shown for all questions, disabled for all or configured for each question individually.\",\n \"optional\": true,\n \"options\": [\n {\n \"value\": \"on\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"off\",\n \"label\": \"Disabled\"\n }\n ]\n },\n {\n \"name\": \"retryButton\",\n \"type\": \"select\",\n \"label\": \"Override \\\"Retry\\\" button\",\n \"importance\": \"low\",\n \"description\": \"This option determines if the \\\"Retry\\\" button will be shown for all questions, disabled for all or configured for each question individually.\",\n \"optional\": true,\n \"options\": [\n {\n \"value\": \"on\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"off\",\n \"label\": \"Disabled\"\n }\n ]\n },\n {\n \"name\": \"showBookmarksmenuOnLoad\",\n \"type\": \"boolean\",\n \"label\": \"Start with bookmarks menu open\",\n \"importance\": \"low\",\n \"default\": false,\n \"description\": \"This function is not available on iPad when using YouTube as video source.\"\n },\n {\n \"name\": \"showRewind10\",\n \"type\": \"boolean\",\n \"label\": \"Show button for rewinding 10 seconds\",\n \"importance\": \"low\",\n \"default\": false\n },\n {\n \"name\": \"preventSkipping\",\n \"type\": \"boolean\",\n \"default\": false,\n \"label\": \"Prevent skipping forward in a video\",\n \"importance\": \"low\",\n \"description\": \"Enabling this options will disable user video navigation through default controls.\"\n },\n {\n \"name\": \"deactivateSound\",\n \"type\": \"boolean\",\n \"default\": false,\n \"label\": \"Deactivate sound\",\n \"importance\": \"low\",\n \"description\": \"Enabling this option will deactivate the video's sound and prevent it from being switched on.\"\n }\n ]\n },\n {\n \"name\": \"l10n\",\n \"type\": \"group\",\n \"label\": \"Localize\",\n \"importance\": \"low\",\n \"common\": true,\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"interaction\",\n \"type\": \"text\",\n \"label\": \"Interaction title\",\n \"importance\": \"low\",\n \"default\": \"Interaction\",\n \"optional\": true\n },\n {\n \"name\": \"play\",\n \"type\": \"text\",\n \"label\": \"Play title\",\n \"importance\": \"low\",\n \"default\": \"Play\",\n \"optional\": true\n },\n {\n \"name\": \"pause\",\n \"type\": \"text\",\n \"label\": \"Pause title\",\n \"importance\": \"low\",\n \"default\": \"Pause\",\n \"optional\": true\n },\n {\n \"name\": \"mute\",\n \"type\": \"text\",\n \"label\": \"Mute title\",\n \"importance\": \"low\",\n \"default\": \"Mute\",\n \"optional\": true\n },\n {\n \"name\": \"unmute\",\n \"type\": \"text\",\n \"label\": \"Unmute title\",\n \"importance\": \"low\",\n \"default\": \"Unmute\",\n \"optional\": true\n },\n {\n \"name\": \"quality\",\n \"type\": \"text\",\n \"label\": \"Video quality title\",\n \"importance\": \"low\",\n \"default\": \"Video Quality\",\n \"optional\": true\n },\n {\n \"name\": \"captions\",\n \"type\": \"text\",\n \"label\": \"Video captions title\",\n \"importance\": \"low\",\n \"default\": \"Captions\",\n \"optional\": true\n },\n {\n \"name\": \"close\",\n \"type\": \"text\",\n \"label\": \"Close button text\",\n \"importance\": \"low\",\n \"default\": \"Close\",\n \"optional\": true\n },\n {\n \"name\": \"fullscreen\",\n \"type\": \"text\",\n \"label\": \"Fullscreen title\",\n \"importance\": \"low\",\n \"default\": \"Fullscreen\",\n \"optional\": true\n },\n {\n \"name\": \"exitFullscreen\",\n \"type\": \"text\",\n \"label\": \"Exit fullscreen title\",\n \"importance\": \"low\",\n \"default\": \"Exit Fullscreen\",\n \"optional\": true\n },\n {\n \"name\": \"summary\",\n \"type\": \"text\",\n \"label\": \"Summary title\",\n \"importance\": \"low\",\n \"default\": \"Open summary dialog\",\n \"optional\": true\n },\n {\n \"name\": \"bookmarks\",\n \"type\": \"text\",\n \"label\": \"Bookmarks title\",\n \"importance\": \"low\",\n \"default\": \"Bookmarks\",\n \"optional\": true\n },\n {\n \"name\": \"endscreen\",\n \"type\": \"text\",\n \"label\": \"Submit screen title\",\n \"importance\": \"low\",\n \"default\": \"Submit screen\",\n \"optional\": true\n },\n {\n \"name\": \"defaultAdaptivitySeekLabel\",\n \"type\": \"text\",\n \"label\": \"Default label for adaptivity seek button\",\n \"importance\": \"low\",\n \"default\": \"Continue\",\n \"optional\": true\n },\n {\n \"name\": \"continueWithVideo\",\n \"type\": \"text\",\n \"label\": \"Default label for continue video button\",\n \"importance\": \"low\",\n \"default\": \"Continue with video\",\n \"optional\": true\n },\n {\n \"name\": \"playbackRate\",\n \"type\": \"text\",\n \"label\": \"Set playback rate\",\n \"importance\": \"low\",\n \"default\": \"Playback Rate\",\n \"optional\": true\n },\n {\n \"name\": \"rewind10\",\n \"type\": \"text\",\n \"label\": \"Rewind 10 Seconds\",\n \"importance\": \"low\",\n \"default\": \"Rewind 10 Seconds\",\n \"optional\": true\n },\n {\n \"name\": \"navDisabled\",\n \"type\": \"text\",\n \"label\": \"Navigation is disabled text\",\n \"importance\": \"low\",\n \"default\": \"Navigation is disabled\",\n \"optional\": true\n },\n {\n \"name\": \"sndDisabled\",\n \"type\": \"text\",\n \"label\": \"Sound is disabled text\",\n \"importance\": \"low\",\n \"default\": \"Sound is disabled\",\n \"optional\": true\n },\n {\n \"name\": \"requiresCompletionWarning\",\n \"type\": \"text\",\n \"label\": \"Warning that the user must answer the question correctly before continuing\",\n \"importance\": \"low\",\n \"default\": \"You need to answer all the questions correctly before continuing.\",\n \"optional\": true\n },\n {\n \"name\": \"back\",\n \"type\": \"text\",\n \"label\": \"Back button\",\n \"importance\": \"low\",\n \"default\": \"Back\",\n \"optional\": true\n },\n {\n \"name\": \"hours\",\n \"type\": \"text\",\n \"label\": \"Passed time hours\",\n \"importance\": \"low\",\n \"default\": \"Hours\",\n \"optional\": true\n },\n {\n \"name\": \"minutes\",\n \"type\": \"text\",\n \"label\": \"Passed time minutes\",\n \"importance\": \"low\",\n \"default\": \"Minutes\",\n \"optional\": true\n },\n {\n \"name\": \"seconds\",\n \"type\": \"text\",\n \"label\": \"Passed time seconds\",\n \"importance\": \"low\",\n \"default\": \"Seconds\",\n \"optional\": true\n },\n {\n \"name\": \"currentTime\",\n \"type\": \"text\",\n \"label\": \"Label for current time\",\n \"importance\": \"low\",\n \"default\": \"Current time:\",\n \"optional\": true\n },\n {\n \"name\": \"totalTime\",\n \"type\": \"text\",\n \"label\": \"Label for total time\",\n \"importance\": \"low\",\n \"default\": \"Total time:\",\n \"optional\": true\n },\n {\n \"name\": \"singleInteractionAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Text explaining that a single interaction with a name has come into view\",\n \"importance\": \"low\",\n \"default\": \"Interaction appeared:\",\n \"optional\": true\n },\n {\n \"name\": \"multipleInteractionsAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Text for explaining that multiple interactions have come into view\",\n \"importance\": \"low\",\n \"default\": \"Multiple interactions appeared.\",\n \"optional\": true\n },\n {\n \"name\": \"videoPausedAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Video is paused announcement\",\n \"importance\": \"low\",\n \"default\": \"Video is paused\",\n \"optional\": true\n },\n {\n \"name\": \"content\",\n \"type\": \"text\",\n \"label\": \"Content label\",\n \"importance\": \"low\",\n \"default\": \"Content\",\n \"optional\": true\n },\n {\n \"name\": \"answered\",\n \"type\": \"text\",\n \"label\": \"Answered message (@answered will be replaced with the number of answered questions)\",\n \"importance\": \"low\",\n \"default\": \"@answered answered\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTitle\",\n \"type\": \"text\",\n \"label\": \"Submit screen title\",\n \"importance\": \"low\",\n \"default\": \"@answered Question(s) answered\",\n \"description\": \"@answered will be replaced by the number of answered questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformation\",\n \"type\": \"text\",\n \"label\": \"Submit screen information\",\n \"importance\": \"low\",\n \"default\": \"You have answered @answered questions, click below to submit your answers.\",\n \"description\": \"@answered will be replaced by the number of answered questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformationNoAnswers\",\n \"type\": \"text\",\n \"label\": \"Submit screen information for missing answers\",\n \"importance\": \"low\",\n \"default\": \"You have not answered any questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformationMustHaveAnswer\",\n \"type\": \"text\",\n \"label\": \"Submit screen information for answer needed\",\n \"importance\": \"low\",\n \"default\": \"You have to answer at least one question before you can submit your answers.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardSubmitButton\",\n \"type\": \"text\",\n \"label\": \"Submit screen submit button\",\n \"importance\": \"low\",\n \"default\": \"Submit Answers\",\n \"optional\": true\n },\n {\n \"name\": \"endcardSubmitMessage\",\n \"type\": \"text\",\n \"label\": \"Submit screen submit message\",\n \"importance\": \"low\",\n \"default\": \"Your answers have been submitted!\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTableRowAnswered\",\n \"type\": \"text\",\n \"label\": \"Submit screen table row title: Answered questions\",\n \"importance\": \"low\",\n \"default\": \"Answered questions\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTableRowScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen table row title: Score\",\n \"importance\": \"low\",\n \"default\": \"Score\",\n \"optional\": true\n },\n {\n \"name\": \"endcardAnsweredScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen answered score\",\n \"importance\": \"low\",\n \"default\": \"answered\",\n \"optional\": true\n },\n {\n \"name\": \"endCardTableRowSummaryWithScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen row summary including score (for readspeakers)\",\n \"importance\": \"low\",\n \"default\": \"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\n \"optional\": true\n },\n {\n \"name\": \"endCardTableRowSummaryWithoutScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen row summary for no score (for readspeakers)\",\n \"importance\": \"low\",\n \"default\": \"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\",\n \"optional\": true\n }\n ]\n }\n]", - "tutorial_url": "", - "has_icon": 1 - }, - "created_at": "2020-09-30T20:24:58.000000Z", - "updated_at": "2020-09-30T20:24:58.000000Z" - }, - "library_name": "H5P.InteractiveVideo", - "major_version": 1, - "minor_version": 21, - "user_name": null, - "user_id": null, - "created_at": "2020-09-30T20:24:58.000000Z", - "updated_at": "2020-09-30T20:24:58.000000Z" + "organization_id": 1, + "organization_visibility_type_id": 4, + "name": "The Science of Golf", + "description": "Uncover the science, technology, engineering, and mathematics behind the game of golf.", + "thumb_url": "\/storage\/uploads\/nN5y8v8zh2ghxrKuHCv5wvJOREFw0Nr27s2DPxWq.png", + "shared": false, + "gcr_project_visibility": true, + "starter_project": false, + "order": null, + "status": 1, + "status_text": "DRAFT", + "indexing": null, + "indexing_text": "NOT REQUESTED", + "created_at": "2020-04-30T20:03:12.000000Z", + "updated_at": "2020-09-17T09:44:27.000000Z" } } ``` ### HTTP Request -`GET api/v1/activities/{activity}/detail` +`GET api/v1/suborganization/{suborganization}/projects/{project}` #### URL Parameters Parameter | Status | Description --------- | ------- | ------- | ------- - `activity` | required | The Id of a activity + `project` | required | The Id of a project + `suborganization` | required | The Id of a suborganization - + - -## H5P Activity + +## Update Project + +Update the specified project of a user. + +> Example request: + +```bash +curl -X PUT \ + "http://localhost:8000/api/v1/suborganization/1/projects/1" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" \ + -d '{"name":"Test Project","description":"This is a test project.","thumb_url":"https:\/\/images.pexels.com\/photos\/2832382","organization_visibility_type_id":1}' + +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/suborganization/1/projects/1" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +let body = { + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "organization_visibility_type_id": 1 +} + +fetch(url, { + method: "PUT", + headers: headers, + body: body +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->put( + 'http://localhost:8000/api/v1/suborganization/1/projects/1', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + 'json' => [ + 'name' => 'Test Project', + 'description' => 'This is a test project.', + 'thumb_url' => 'https://images.pexels.com/photos/2832382', + 'organization_visibility_type_id' => 1, + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/suborganization/1/projects/1' +payload = { + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "organization_visibility_type_id": 1 +} +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('PUT', url, headers=headers, json=payload) +response.json() +``` + + +> Example response (500): + +```json +{ + "errors": [ + "Failed to update project." + ] +} +``` +> Example response (200): + +```json +{ + "project": { + "id": 1, + "organization_id": 1, + "organization_visibility_type_id": 4, + "name": "The Science of Golf", + "description": "Uncover the science, technology, engineering, and mathematics behind the game of golf.", + "thumb_url": "\/storage\/uploads\/nN5y8v8zh2ghxrKuHCv5wvJOREFw0Nr27s2DPxWq.png", + "shared": false, + "gcr_project_visibility": true, + "starter_project": false, + "order": null, + "status": 1, + "status_text": "DRAFT", + "indexing": null, + "indexing_text": "NOT REQUESTED", + "created_at": "2020-04-30T20:03:12.000000Z", + "updated_at": "2020-09-17T09:44:27.000000Z" + } +} +``` + +### HTTP Request +`PUT api/v1/suborganization/{suborganization}/projects/{project}` + +`PATCH api/v1/suborganization/{suborganization}/projects/{project}` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `project` | required | The Id of a project + `suborganization` | required | The Id of a suborganization +#### Body Parameters +Parameter | Type | Status | Description +--------- | ------- | ------- | ------- | ----------- + `name` | string | required | Name of a project + `description` | string | required | Description of a project + `thumb_url` | string | required | Thumbnail Url of a project + `organization_visibility_type_id` | integer | required | Id of the organization visibility type + + + + +## Remove Project + +Remove the specified project of a user. + +> Example request: + +```bash +curl -X DELETE \ + "http://localhost:8000/api/v1/suborganization/1/projects/1" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/suborganization/1/projects/1" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +fetch(url, { + method: "DELETE", + headers: headers, +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->delete( + 'http://localhost:8000/api/v1/suborganization/1/projects/1', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/suborganization/1/projects/1' +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('DELETE', url, headers=headers) +response.json() +``` + + +> Example response (200): + +```json +{ + "message": "Project has been deleted successfully." +} +``` +> Example response (500): + +```json +{ + "errors": [ + "Failed to delete project." + ] +} +``` + +### HTTP Request +`DELETE api/v1/suborganization/{suborganization}/projects/{project}` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `suborganization` | required | The Id of a suborganization + `project` | required | The Id of a project + + + + +## Get the Projects by Ids + +> Example request: + +```bash +curl -X POST \ + "http://localhost:8000/api/v1/suborganization/1/projects/by-ids" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/suborganization/1/projects/by-ids" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +fetch(url, { + method: "POST", + headers: headers, +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->post( + 'http://localhost:8000/api/v1/suborganization/1/projects/by-ids', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/suborganization/1/projects/by-ids' +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('POST', url, headers=headers) +response.json() +``` + + +> Example response (200): + +```json +null +``` + +### HTTP Request +`POST api/v1/suborganization/{suborganization}/projects/by-ids` + + + + + +## Get All Organization Projects + +Get a list of the projects of an organization. + +> Example request: + +```bash +curl -X GET \ + -G "http://localhost:8000/api/v1/suborganizations/1/projects" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" \ + -d '{"query":"Vivensity","size":10,"order_by_column":"name","order_by_type":"asc"}' + +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/suborganizations/1/projects" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +let body = { + "query": "Vivensity", + "size": 10, + "order_by_column": "name", + "order_by_type": "asc" +} + +fetch(url, { + method: "GET", + headers: headers, + body: body +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->get( + 'http://localhost:8000/api/v1/suborganizations/1/projects', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + 'json' => [ + 'query' => 'Vivensity', + 'size' => 10, + 'order_by_column' => 'name', + 'order_by_type' => 'asc', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/suborganizations/1/projects' +payload = { + "query": "Vivensity", + "size": 10, + "order_by_column": "name", + "order_by_type": "asc" +} +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('GET', url, headers=headers, json=payload) +response.json() +``` + + +> Example response (200): + +```json +{ + "projects": [ + { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "is_public": true, + "gcr_project_visibility": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + { + "id": 2, + "name": "Math Project", + "description": "This is a test math project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832384", + "shared": true, + "starter_project": null, + "is_public": true, + "created_at": "2020-09-07T19:21:08.000000Z", + "updated_at": "2020-09-07T19:21:08.000000Z" + } + ] +} +``` + +### HTTP Request +`GET api/v1/suborganizations/{suborganization}/projects` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `suborganization` | required | The Id of a suborganization +#### Body Parameters +Parameter | Type | Status | Description +--------- | ------- | ------- | ------- | ----------- + `query` | string | optional | Query to search suborganization against + `size` | integer | optional | size to show per page records + `order_by_column` | string | optional | to sort data with specific column + `order_by_type` | string | optional | to sort data in ascending or descending order + + + + +## Project Indexing + +Modify the index value of a project. > Example request: ```bash curl -X GET \ - -G "http://localhost:8082/api/api/v1/activities/1/h5p" \ + -G "http://localhost:8000/api/v1/projects/1/indexes/3" \ -H "Content-Type: application/json" \ -H "Accept: application/json" ``` ```javascript const url = new URL( - "http://localhost:8082/api/api/v1/activities/1/h5p" + "http://localhost:8000/api/v1/projects/1/indexes/3" ); let headers = { @@ -6715,7 +6918,7 @@ fetch(url, { $client = new \GuzzleHttp\Client(); $response = $client->get( - 'http://localhost:8082/api/api/v1/activities/1/h5p', + 'http://localhost:8000/api/v1/projects/1/indexes/3', [ 'headers' => [ 'Content-Type' => 'application/json', @@ -6731,7 +6934,7 @@ print_r(json_decode((string) $body)); import requests import json -url = 'http://localhost:8082/api/api/v1/activities/1/h5p' +url = 'http://localhost:8000/api/v1/projects/1/indexes/3' headers = { 'Content-Type': 'application/json', 'Accept': 'application/json' @@ -6743,40 +6946,11342 @@ response.json() > Example response (200): +```json +null +``` +> Example response (500): + ```json { - "activity": { - "id": 1, - "title": "Science of Golf: Why Balls Have Dimples", - "type": "h5p", - "content": "", - "shared": false, - "order": 2, - "thumb_url": null, - "subject_id": null, - "education_level_id": null, - "h5p": { - "settings": { - "baseUrl": "https:\/\/www.currikistudio.org\/api", - "url": "https:\/\/www.currikistudio.org\/api\/storage\/h5p", - "postUserStatistics": true, - "ajax": { - "setFinished": "https:\/\/www.currikistudio.org\/api\/api\/h5p\/ajax\/url", - "contentUserData": "https:\/\/www.currikistudio.org\/api\/api\/h5p\/ajax\/content-user-data\/?content_id=:contentId&data_type=:dataType&sub_content_id=:subContentId" - }, - "saveFreq": false, - "siteUrl": "https:\/\/www.currikistudio.org\/api", - "l10n": { - "H5P": { - "fullscreen": "Fullscreen", - "disableFullscreen": "Disable fullscreen", - "download": "Download", - "copyrights": "Rights of use", - "embed": "Embed", - "reuseDescription": "Reuse this content.", - "size": "Size", - "showAdvanced": "Show advanced", - "hideAdvanced": "Hide advanced", + "errors": [ + "Invalid index value provided." + ] +} +``` + +### HTTP Request +`GET api/v1/projects/{project}/indexes/{index}` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `project` | required | Project Id. + `index` | required | New Integer Index Value, 1 => 'REQUESTED', 2 => 'NOT APPROVED', 3 => 'APPROVED'. + + + + +## Starter Project Toggle + +Toggle the starter flag of any project + +> Example request: + +```bash +curl -X POST \ + "http://localhost:8000/api/v1/projects/starter/1" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" \ + -d '{"projects":"[1,2,3]","flag":true}' + +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/projects/starter/1" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +let body = { + "projects": "[1,2,3]", + "flag": true +} + +fetch(url, { + method: "POST", + headers: headers, + body: body +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->post( + 'http://localhost:8000/api/v1/projects/starter/1', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + 'json' => [ + 'projects' => '[1,2,3]', + 'flag' => true, + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/projects/starter/1' +payload = { + "projects": "[1,2,3]", + "flag": true +} +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('POST', url, headers=headers, json=payload) +response.json() +``` + + +> Example response (200): + +```json +null +``` +> Example response (500): + +```json +{ + "errors": [ + "Choose at-least one project." + ] +} +``` + +### HTTP Request +`POST api/v1/projects/starter/{flag}` + +#### Body Parameters +Parameter | Type | Status | Description +--------- | ------- | ------- | ------- | ----------- + `projects` | array | required | Projects Ids array. + `flag` | boolean | required | Selected projects remove or make starter. + + + +#4. Playlist + + +APIs for playlist management + +## Get Shared Playlist + +Get the specified shared playlist of a Project. + +> Example request: + +```bash +curl -X GET \ + -G "http://localhost:8000/api/v1/playlists/1/load-shared" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/playlists/1/load-shared" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +fetch(url, { + method: "GET", + headers: headers, +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->get( + 'http://localhost:8000/api/v1/playlists/1/load-shared', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/playlists/1/load-shared' +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('GET', url, headers=headers) +response.json() +``` + + +> Example response (400): + +```json +{ + "errors": [ + "No shareable Project found." + ] +} +``` +> Example response (200): + +```json +{ + "playlist": { + "id": 1, + "title": "Math Playlist", + "order": 0, + "is_public": true, + "project_id": 1, + "gcr_playlist_visibility": true, + "project": { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "users": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@currikistudio.org", + "role": "owner" + } + ], + "is_public": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + "activities": [], + "created_at": "2020-09-07T17:01:24.000000Z", + "updated_at": "2020-09-07T17:01:24.000000Z" + } +} +``` + +### HTTP Request +`GET api/v1/playlists/{playlist}/load-shared` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `playlist` | required | The Id of a playlist + + + + +## Get Shared Playlist + +Get the specified shared playlist detail. + +> Example request: + +```bash +curl -X GET \ + -G "http://localhost:8000/api/v1/projects/1/playlists/1/load-shared-playlist" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/projects/1/playlists/1/load-shared-playlist" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +fetch(url, { + method: "GET", + headers: headers, +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->get( + 'http://localhost:8000/api/v1/projects/1/playlists/1/load-shared-playlist', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/projects/1/playlists/1/load-shared-playlist' +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('GET', url, headers=headers) +response.json() +``` + + +> Example response (400): + +```json +{ + "errors": [ + "No shareable Playlist found." + ] +} +``` +> Example response (200): + +```json +{ + "playlist": { + "id": 1, + "title": "Math Playlist", + "order": 0, + "is_public": true, + "project_id": 1, + "gcr_playlist_visibility": true, + "project": { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "users": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@currikistudio.org", + "role": "owner" + } + ], + "is_public": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + "activities": [], + "created_at": "2020-09-07T17:01:24.000000Z", + "updated_at": "2020-09-07T17:01:24.000000Z" + } +} +``` + +### HTTP Request +`GET api/v1/projects/{project}/playlists/{playlist}/load-shared-playlist` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `project` | required | The Id of a playlist + + + + +## Get All Shared Playlists of a Project + +Get the list of shared playlists detail. + +> Example request: + +```bash +curl -X GET \ + -G "http://localhost:8000/api/v1/projects/1/shared-playlists" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/projects/1/shared-playlists" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +fetch(url, { + method: "GET", + headers: headers, +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->get( + 'http://localhost:8000/api/v1/projects/1/shared-playlists', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/projects/1/shared-playlists' +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('GET', url, headers=headers) +response.json() +``` + + +> Example response (400): + +```json +{ + "errors": [ + "No shareable Playlist found." + ] +} +``` +> Example response (200): + +```json +{ + "playlist": { + "id": 1, + "title": "Math Playlist", + "order": 0, + "is_public": true, + "project_id": 1, + "gcr_playlist_visibility": true, + "project": { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "users": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@currikistudio.org", + "role": "owner" + } + ], + "is_public": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + "activities": [], + "created_at": "2020-09-07T17:01:24.000000Z", + "updated_at": "2020-09-07T17:01:24.000000Z" + } +} +``` + +### HTTP Request +`GET api/v1/projects/{project}/shared-playlists` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `project` | required | The Id of a project + + + + +## api/v1/playlists/update-order +> Example request: + +```bash +curl -X GET \ + -G "http://localhost:8000/api/v1/playlists/update-order" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/playlists/update-order" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +fetch(url, { + method: "GET", + headers: headers, +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->get( + 'http://localhost:8000/api/v1/playlists/update-order', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/playlists/update-order' +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('GET', url, headers=headers) +response.json() +``` + + +> Example response (500): + +```json +{ + "message": "Server Error" +} +``` + +### HTTP Request +`GET api/v1/playlists/update-order` + + + + + +## Reorder Playlists + +Reorder playlists of a project. + +> Example request: + +```bash +curl -X POST \ + "http://localhost:8000/api/v1/projects/1/playlists/reorder" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" \ + -d '{"playlists":[]}' + +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/projects/1/playlists/reorder" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +let body = { + "playlists": [] +} + +fetch(url, { + method: "POST", + headers: headers, + body: body +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->post( + 'http://localhost:8000/api/v1/projects/1/playlists/reorder', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + 'json' => [ + 'playlists' => [], + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/projects/1/playlists/reorder' +payload = { + "playlists": [] +} +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('POST', url, headers=headers, json=payload) +response.json() +``` + + +> Example response (200): + +```json +{ + "playlists": [ + { + "id": 1, + "title": "Math Playlist", + "order": 0, + "is_public": true, + "gcr_playlist_visibility": true, + "project_id": 1, + "project": { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "users": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@currikistudio.org", + "role": "owner" + } + ], + "is_public": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + "activities": [ + { + "id": 1, + "playlist_id": 1, + "title": "Audio Record", + "type": "h5p", + "content": "Audio Record content", + "shared": true, + "order": 0, + "thumb_url": "\/storage\/activities\/3vVpHHh75MJHOV6a6iZdy13luBaiNn1SrniYpBbQ.png", + "subject_id": "Career & Technical Education", + "education_level_id": null, + "h5p_content": { + "id": 19430, + "user_id": 1, + "title": "record", + "library_id": 98, + "parameters": "{\"l10n\":{\"recordAnswer\":\"Record\",\"pause\":\"Pause\",\"continue\":\"Continue\",\"download\":\"Download\",\"done\":\"Done\",\"retry\":\"Retry\",\"microphoneNotSupported\":\"Microphone not supported. Make sure you are using a browser that allows microphone recording.\",\"microphoneInaccessible\":\"Microphone is not accessible. Make sure that the browser microphone is enabled.\",\"insecureNotAllowed\":\"Access to microphone is not allowed in your browser since this page is not served using HTTPS. Please contact the author, and ask him to make this available using HTTPS\",\"statusReadyToRecord\":\"Press a button below to record your answer.\",\"statusRecording\":\"Recording...\",\"statusPaused\":\"Recording paused. Press a button to continue recording.\",\"statusFinishedRecording\":\"You have successfully recorded your answer! Listen to the recording below.\",\"downloadRecording\":\"Download this recording or retry.\",\"retryDialogHeaderText\":\"Retry recording?\",\"retryDialogBodyText\":\"By pressing \\\"Retry\\\" you will lose your current recording.\",\"retryDialogConfirmText\":\"Retry\",\"retryDialogCancelText\":\"Cancel\",\"statusCantCreateTheAudioFile\":\"Can't create the audio file.\"}}", + "filtered": "{\"l10n\":{\"recordAnswer\":\"Record\",\"pause\":\"Pause\",\"continue\":\"Continue\",\"download\":\"Download\",\"done\":\"Done\",\"retry\":\"Retry\",\"microphoneNotSupported\":\"Microphone not supported. Make sure you are using a browser that allows microphone recording.\",\"microphoneInaccessible\":\"Microphone is not accessible. Make sure that the browser microphone is enabled.\",\"insecureNotAllowed\":\"Access to microphone is not allowed in your browser since this page is not served using HTTPS. Please contact the author, and ask him to make this available using HTTPS\",\"statusReadyToRecord\":\"Press a button below to record your answer.\",\"statusRecording\":\"Recording...\",\"statusPaused\":\"Recording paused. Press a button to continue recording.\",\"statusFinishedRecording\":\"You have successfully recorded your answer! Listen to the recording below.\",\"downloadRecording\":\"Download this recording or retry.\",\"retryDialogHeaderText\":\"Retry recording?\",\"retryDialogBodyText\":\"By pressing "Retry" you will lose your current recording.\",\"retryDialogConfirmText\":\"Retry\",\"retryDialogCancelText\":\"Cancel\",\"statusCantCreateTheAudioFile\":\"Can't create the audio file.\"}}", + "slug": "record", + "embed_type": "div", + "disable": 9, + "content_type": null, + "authors": null, + "source": null, + "year_from": null, + "year_to": null, + "license": "U", + "license_version": null, + "license_extras": null, + "author_comments": null, + "changes": null, + "default_language": null, + "created_at": "2020-09-27T07:14:57.000000Z", + "updated_at": "2020-09-27T07:14:57.000000Z" + }, + "is_public": false, + "created_at": "2020-09-27T07:14:57.000000Z", + "updated_at": "2020-09-27T07:14:57.000000Z" + }, + { + "id": 2, + "playlist_id": 1, + "title": "Language Arts", + "type": "h5p", + "content": "Language Arts content", + "shared": true, + "order": 1, + "thumb_url": "\/storage\/activities\/w2LXV4VMPgccjJyZbs16wSzglX1s58K5NFfFp7ed.png", + "subject_id": "Language Arts", + "education_level_id": null, + "h5p_content": { + "id": 19431, + "user_id": 1, + "title": "fghfhg", + "library_id": 98, + "parameters": "{\"l10n\":{\"recordAnswer\":\"Record\",\"pause\":\"Pause\",\"continue\":\"Continue\",\"download\":\"Download\",\"done\":\"Done\",\"retry\":\"Retry\",\"microphoneNotSupported\":\"Microphone not supported. Make sure you are using a browser that allows microphone recording.\",\"microphoneInaccessible\":\"Microphone is not accessible. Make sure that the browser microphone is enabled.\",\"insecureNotAllowed\":\"Access to microphone is not allowed in your browser since this page is not served using HTTPS. Please contact the author, and ask him to make this available using HTTPS\",\"statusReadyToRecord\":\"Press a button below to record your answer.\",\"statusRecording\":\"Recording...\",\"statusPaused\":\"Recording paused. Press a button to continue recording.\",\"statusFinishedRecording\":\"You have successfully recorded your answer! Listen to the recording below.\",\"downloadRecording\":\"Download this recording or retry.\",\"retryDialogHeaderText\":\"Retry recording?\",\"retryDialogBodyText\":\"By pressing \\\"Retry\\\" you will lose your current recording.\",\"retryDialogConfirmText\":\"Retry\",\"retryDialogCancelText\":\"Cancel\",\"statusCantCreateTheAudioFile\":\"Can't create the audio file.\"}}", + "filtered": "{\"l10n\":{\"recordAnswer\":\"Record\",\"pause\":\"Pause\",\"continue\":\"Continue\",\"download\":\"Download\",\"done\":\"Done\",\"retry\":\"Retry\",\"microphoneNotSupported\":\"Microphone not supported. Make sure you are using a browser that allows microphone recording.\",\"microphoneInaccessible\":\"Microphone is not accessible. Make sure that the browser microphone is enabled.\",\"insecureNotAllowed\":\"Access to microphone is not allowed in your browser since this page is not served using HTTPS. Please contact the author, and ask him to make this available using HTTPS\",\"statusReadyToRecord\":\"Press a button below to record your answer.\",\"statusRecording\":\"Recording...\",\"statusPaused\":\"Recording paused. Press a button to continue recording.\",\"statusFinishedRecording\":\"You have successfully recorded your answer! Listen to the recording below.\",\"downloadRecording\":\"Download this recording or retry.\",\"retryDialogHeaderText\":\"Retry recording?\",\"retryDialogBodyText\":\"By pressing "Retry" you will lose your current recording.\",\"retryDialogConfirmText\":\"Retry\",\"retryDialogCancelText\":\"Cancel\",\"statusCantCreateTheAudioFile\":\"Can't create the audio file.\"}}", + "slug": "fghfhg", + "embed_type": "div", + "disable": 9, + "content_type": null, + "authors": null, + "source": null, + "year_from": null, + "year_to": null, + "license": "U", + "license_version": null, + "license_extras": null, + "author_comments": null, + "changes": null, + "default_language": null, + "created_at": "2020-09-07T07:15:31.000000Z", + "updated_at": "2020-09-07T07:15:31.000000Z" + }, + "is_public": false, + "created_at": "2020-09-07T07:15:31.000000Z", + "updated_at": "2020-09-07T07:15:31.000000Z" + } + ], + "created_at": "2020-09-07T17:01:24.000000Z", + "updated_at": "2020-09-07T17:01:24.000000Z" + }, + { + "id": 2, + "title": "Music Playlist", + "order": 1, + "is_public": false, + "project_id": 1, + "project": { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "users": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@currikistudio.org", + "role": "owner" + } + ], + "is_public": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + "activities": [], + "created_at": "2020-09-16T18:21:29.000000Z", + "updated_at": "2020-09-16T18:21:29.000000Z" + } + ] +} +``` + +### HTTP Request +`POST api/v1/projects/{project}/playlists/reorder` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `project` | required | The Id of a project +#### Body Parameters +Parameter | Type | Status | Description +--------- | ------- | ------- | ------- | ----------- + `playlists` | array | required | Playlists of a project + + + + +## Clone Playlist + +Clone a playlist of a project. + +> Example request: + +```bash +curl -X POST \ + "http://localhost:8000/api/v1/projects/1/playlists/1/clone" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/projects/1/playlists/1/clone" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +fetch(url, { + method: "POST", + headers: headers, +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->post( + 'http://localhost:8000/api/v1/projects/1/playlists/1/clone', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/projects/1/playlists/1/clone' +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('POST', url, headers=headers) +response.json() +``` + + +> Example response (200): + +```json +{ + "message": "Playlist is being cloned|duplicated in background!" +} +``` +> Example response (500): + +```json +{ + "errors": [ + "Not a Public Playlist." + ] +} +``` + +### HTTP Request +`POST api/v1/projects/{project}/playlists/{playlist}/clone` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `project` | required | The Id of a project + `playlist` | required | The Id of a playlist + + + + +## Get Playlists + +Get a list of the playlists of a project. + +> Example request: + +```bash +curl -X GET \ + -G "http://localhost:8000/api/v1/projects/1/playlists" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/projects/1/playlists" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +fetch(url, { + method: "GET", + headers: headers, +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->get( + 'http://localhost:8000/api/v1/projects/1/playlists', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/projects/1/playlists' +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('GET', url, headers=headers) +response.json() +``` + + +> Example response (200): + +```json +{ + "playlists": [ + { + "id": 1, + "title": "Math Playlist", + "order": 0, + "is_public": true, + "gcr_playlist_visibility": true, + "project_id": 1, + "project": { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "users": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@currikistudio.org", + "role": "owner" + } + ], + "is_public": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + "activities": [ + { + "id": 1, + "playlist_id": 1, + "title": "Audio Record", + "type": "h5p", + "content": "Audio Record content", + "shared": true, + "order": 0, + "thumb_url": "\/storage\/activities\/3vVpHHh75MJHOV6a6iZdy13luBaiNn1SrniYpBbQ.png", + "subject_id": "Career & Technical Education", + "education_level_id": null, + "h5p_content": { + "id": 19430, + "user_id": 1, + "title": "record", + "library_id": 98, + "parameters": "{\"l10n\":{\"recordAnswer\":\"Record\",\"pause\":\"Pause\",\"continue\":\"Continue\",\"download\":\"Download\",\"done\":\"Done\",\"retry\":\"Retry\",\"microphoneNotSupported\":\"Microphone not supported. Make sure you are using a browser that allows microphone recording.\",\"microphoneInaccessible\":\"Microphone is not accessible. Make sure that the browser microphone is enabled.\",\"insecureNotAllowed\":\"Access to microphone is not allowed in your browser since this page is not served using HTTPS. Please contact the author, and ask him to make this available using HTTPS\",\"statusReadyToRecord\":\"Press a button below to record your answer.\",\"statusRecording\":\"Recording...\",\"statusPaused\":\"Recording paused. Press a button to continue recording.\",\"statusFinishedRecording\":\"You have successfully recorded your answer! Listen to the recording below.\",\"downloadRecording\":\"Download this recording or retry.\",\"retryDialogHeaderText\":\"Retry recording?\",\"retryDialogBodyText\":\"By pressing \\\"Retry\\\" you will lose your current recording.\",\"retryDialogConfirmText\":\"Retry\",\"retryDialogCancelText\":\"Cancel\",\"statusCantCreateTheAudioFile\":\"Can't create the audio file.\"}}", + "filtered": "{\"l10n\":{\"recordAnswer\":\"Record\",\"pause\":\"Pause\",\"continue\":\"Continue\",\"download\":\"Download\",\"done\":\"Done\",\"retry\":\"Retry\",\"microphoneNotSupported\":\"Microphone not supported. Make sure you are using a browser that allows microphone recording.\",\"microphoneInaccessible\":\"Microphone is not accessible. Make sure that the browser microphone is enabled.\",\"insecureNotAllowed\":\"Access to microphone is not allowed in your browser since this page is not served using HTTPS. Please contact the author, and ask him to make this available using HTTPS\",\"statusReadyToRecord\":\"Press a button below to record your answer.\",\"statusRecording\":\"Recording...\",\"statusPaused\":\"Recording paused. Press a button to continue recording.\",\"statusFinishedRecording\":\"You have successfully recorded your answer! Listen to the recording below.\",\"downloadRecording\":\"Download this recording or retry.\",\"retryDialogHeaderText\":\"Retry recording?\",\"retryDialogBodyText\":\"By pressing "Retry" you will lose your current recording.\",\"retryDialogConfirmText\":\"Retry\",\"retryDialogCancelText\":\"Cancel\",\"statusCantCreateTheAudioFile\":\"Can't create the audio file.\"}}", + "slug": "record", + "embed_type": "div", + "disable": 9, + "content_type": null, + "authors": null, + "source": null, + "year_from": null, + "year_to": null, + "license": "U", + "license_version": null, + "license_extras": null, + "author_comments": null, + "changes": null, + "default_language": null, + "created_at": "2020-09-27T07:14:57.000000Z", + "updated_at": "2020-09-27T07:14:57.000000Z" + }, + "is_public": false, + "created_at": "2020-09-27T07:14:57.000000Z", + "updated_at": "2020-09-27T07:14:57.000000Z" + }, + { + "id": 2, + "playlist_id": 1, + "title": "Language Arts", + "type": "h5p", + "content": "Language Arts content", + "shared": true, + "order": 1, + "thumb_url": "\/storage\/activities\/w2LXV4VMPgccjJyZbs16wSzglX1s58K5NFfFp7ed.png", + "subject_id": "Language Arts", + "education_level_id": null, + "h5p_content": { + "id": 19431, + "user_id": 1, + "title": "fghfhg", + "library_id": 98, + "parameters": "{\"l10n\":{\"recordAnswer\":\"Record\",\"pause\":\"Pause\",\"continue\":\"Continue\",\"download\":\"Download\",\"done\":\"Done\",\"retry\":\"Retry\",\"microphoneNotSupported\":\"Microphone not supported. Make sure you are using a browser that allows microphone recording.\",\"microphoneInaccessible\":\"Microphone is not accessible. Make sure that the browser microphone is enabled.\",\"insecureNotAllowed\":\"Access to microphone is not allowed in your browser since this page is not served using HTTPS. Please contact the author, and ask him to make this available using HTTPS\",\"statusReadyToRecord\":\"Press a button below to record your answer.\",\"statusRecording\":\"Recording...\",\"statusPaused\":\"Recording paused. Press a button to continue recording.\",\"statusFinishedRecording\":\"You have successfully recorded your answer! Listen to the recording below.\",\"downloadRecording\":\"Download this recording or retry.\",\"retryDialogHeaderText\":\"Retry recording?\",\"retryDialogBodyText\":\"By pressing \\\"Retry\\\" you will lose your current recording.\",\"retryDialogConfirmText\":\"Retry\",\"retryDialogCancelText\":\"Cancel\",\"statusCantCreateTheAudioFile\":\"Can't create the audio file.\"}}", + "filtered": "{\"l10n\":{\"recordAnswer\":\"Record\",\"pause\":\"Pause\",\"continue\":\"Continue\",\"download\":\"Download\",\"done\":\"Done\",\"retry\":\"Retry\",\"microphoneNotSupported\":\"Microphone not supported. Make sure you are using a browser that allows microphone recording.\",\"microphoneInaccessible\":\"Microphone is not accessible. Make sure that the browser microphone is enabled.\",\"insecureNotAllowed\":\"Access to microphone is not allowed in your browser since this page is not served using HTTPS. Please contact the author, and ask him to make this available using HTTPS\",\"statusReadyToRecord\":\"Press a button below to record your answer.\",\"statusRecording\":\"Recording...\",\"statusPaused\":\"Recording paused. Press a button to continue recording.\",\"statusFinishedRecording\":\"You have successfully recorded your answer! Listen to the recording below.\",\"downloadRecording\":\"Download this recording or retry.\",\"retryDialogHeaderText\":\"Retry recording?\",\"retryDialogBodyText\":\"By pressing "Retry" you will lose your current recording.\",\"retryDialogConfirmText\":\"Retry\",\"retryDialogCancelText\":\"Cancel\",\"statusCantCreateTheAudioFile\":\"Can't create the audio file.\"}}", + "slug": "fghfhg", + "embed_type": "div", + "disable": 9, + "content_type": null, + "authors": null, + "source": null, + "year_from": null, + "year_to": null, + "license": "U", + "license_version": null, + "license_extras": null, + "author_comments": null, + "changes": null, + "default_language": null, + "created_at": "2020-09-07T07:15:31.000000Z", + "updated_at": "2020-09-07T07:15:31.000000Z" + }, + "is_public": false, + "created_at": "2020-09-07T07:15:31.000000Z", + "updated_at": "2020-09-07T07:15:31.000000Z" + } + ], + "created_at": "2020-09-07T17:01:24.000000Z", + "updated_at": "2020-09-07T17:01:24.000000Z" + }, + { + "id": 2, + "title": "Music Playlist", + "order": 1, + "is_public": false, + "project_id": 1, + "project": { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "users": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@currikistudio.org", + "role": "owner" + } + ], + "is_public": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + "activities": [], + "created_at": "2020-09-16T18:21:29.000000Z", + "updated_at": "2020-09-16T18:21:29.000000Z" + } + ] +} +``` + +### HTTP Request +`GET api/v1/projects/{project}/playlists` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `project` | required | The Id of a project + + + + +## Create Playlist + +Create a new playlist of a project. + +> Example request: + +```bash +curl -X POST \ + "http://localhost:8000/api/v1/projects/ipsa/playlists" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" \ + -d '{"title":"Math Playlist","order":0}' + +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/projects/ipsa/playlists" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +let body = { + "title": "Math Playlist", + "order": 0 +} + +fetch(url, { + method: "POST", + headers: headers, + body: body +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->post( + 'http://localhost:8000/api/v1/projects/ipsa/playlists', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + 'json' => [ + 'title' => 'Math Playlist', + 'order' => 0, + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/projects/ipsa/playlists' +payload = { + "title": "Math Playlist", + "order": 0 +} +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('POST', url, headers=headers, json=payload) +response.json() +``` + + +> Example response (500): + +```json +{ + "errors": [ + "Could not create playlist. Please try again later." + ] +} +``` +> Example response (201): + +```json +{ + "playlist": { + "id": 1, + "title": "Math Playlist", + "order": 0, + "is_public": true, + "project_id": 1, + "gcr_playlist_visibility": true, + "project": { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "users": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@currikistudio.org", + "role": "owner" + } + ], + "is_public": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + "activities": [], + "created_at": "2020-09-07T17:01:24.000000Z", + "updated_at": "2020-09-07T17:01:24.000000Z" + } +} +``` + +### HTTP Request +`POST api/v1/projects/{project}/playlists` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `project` | required | The Id of a project Example 1 +#### Body Parameters +Parameter | Type | Status | Description +--------- | ------- | ------- | ------- | ----------- + `title` | string | required | The title of a playlist + `order` | integer | optional | The order number of a playlist + + + + +## Get Playlist + +Get the specified playlist of a project. + +> Example request: + +```bash +curl -X GET \ + -G "http://localhost:8000/api/v1/projects/1/playlists/1" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/projects/1/playlists/1" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +fetch(url, { + method: "GET", + headers: headers, +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->get( + 'http://localhost:8000/api/v1/projects/1/playlists/1', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/projects/1/playlists/1' +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('GET', url, headers=headers) +response.json() +``` + + +> Example response (400): + +```json +{ + "errors": [ + "Invalid project or playlist id." + ] +} +``` +> Example response (200): + +```json +{ + "playlist": { + "id": 1, + "title": "Math Playlist", + "order": 0, + "is_public": true, + "project_id": 1, + "gcr_playlist_visibility": true, + "project": { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "users": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@currikistudio.org", + "role": "owner" + } + ], + "is_public": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + "activities": [], + "created_at": "2020-09-07T17:01:24.000000Z", + "updated_at": "2020-09-07T17:01:24.000000Z" + } +} +``` + +### HTTP Request +`GET api/v1/projects/{project}/playlists/{playlist}` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `project` | required | The Id of a project + `playlist` | required | The Id of a playlist + + + + +## Update Playlist + +Update the specified playlist of a project. + +> Example request: + +```bash +curl -X PUT \ + "http://localhost:8000/api/v1/projects/1/playlists/1" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" \ + -d '{"title":"Math Playlist","order":0}' + +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/projects/1/playlists/1" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +let body = { + "title": "Math Playlist", + "order": 0 +} + +fetch(url, { + method: "PUT", + headers: headers, + body: body +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->put( + 'http://localhost:8000/api/v1/projects/1/playlists/1', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + 'json' => [ + 'title' => 'Math Playlist', + 'order' => 0, + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/projects/1/playlists/1' +payload = { + "title": "Math Playlist", + "order": 0 +} +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('PUT', url, headers=headers, json=payload) +response.json() +``` + + +> Example response (400): + +```json +{ + "errors": [ + "Invalid project or playlist id." + ] +} +``` +> Example response (500): + +```json +{ + "errors": [ + "Failed to update playlist." + ] +} +``` +> Example response (200): + +```json +{ + "playlist": { + "id": 1, + "title": "Math Playlist", + "order": 0, + "is_public": true, + "project_id": 1, + "gcr_playlist_visibility": true, + "project": { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "users": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@currikistudio.org", + "role": "owner" + } + ], + "is_public": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + "activities": [], + "created_at": "2020-09-07T17:01:24.000000Z", + "updated_at": "2020-09-07T17:01:24.000000Z" + } +} +``` + +### HTTP Request +`PUT api/v1/projects/{project}/playlists/{playlist}` + +`PATCH api/v1/projects/{project}/playlists/{playlist}` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `project` | required | The Id of a project + `playlist` | required | The Id of a playlist +#### Body Parameters +Parameter | Type | Status | Description +--------- | ------- | ------- | ------- | ----------- + `title` | string | required | The title of a playlist + `order` | integer | optional | The order number of a playlist + + + + +## Remove Playlist + +Remove the specified playlist of a project. + +> Example request: + +```bash +curl -X DELETE \ + "http://localhost:8000/api/v1/projects/1/playlists/1" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/projects/1/playlists/1" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +fetch(url, { + method: "DELETE", + headers: headers, +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->delete( + 'http://localhost:8000/api/v1/projects/1/playlists/1', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/projects/1/playlists/1' +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('DELETE', url, headers=headers) +response.json() +``` + + +> Example response (200): + +```json +{ + "message": "Playlist has been deleted successfully." +} +``` +> Example response (400): + +```json +{ + "errors": [ + "Invalid project or playlist id." + ] +} +``` +> Example response (500): + +```json +{ + "errors": [ + "Failed to delete playlist." + ] +} +``` + +### HTTP Request +`DELETE api/v1/projects/{project}/playlists/{playlist}` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `project` | required | The Id of a project + `playlist` | required | The Id of a playlist + + + + +## Get Playlist Search Preview + +Get the specified playlist search preview. + +> Example request: + +```bash +curl -X GET \ + -G "http://localhost:8000/api/v1/suborganization/1/playlists/1/search-preview" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/suborganization/1/playlists/1/search-preview" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +fetch(url, { + method: "GET", + headers: headers, +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->get( + 'http://localhost:8000/api/v1/suborganization/1/playlists/1/search-preview', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/suborganization/1/playlists/1/search-preview' +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('GET', url, headers=headers) +response.json() +``` + + +> Example response (404): + +```json +{ + "message": [ + "Playlist is not available." + ] +} +``` +> Example response (200): + +```json +{ + "playlist": { + "id": 1, + "title": "Math Playlist", + "order": 0, + "is_public": true, + "project_id": 1, + "gcr_playlist_visibility": true, + "project": { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "users": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@currikistudio.org", + "role": "owner" + } + ], + "is_public": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + "activities": [], + "created_at": "2020-09-07T17:01:24.000000Z", + "updated_at": "2020-09-07T17:01:24.000000Z" + } +} +``` + +### HTTP Request +`GET api/v1/suborganization/{suborganization}/playlists/{playlist}/search-preview` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `suborganization` | required | The Id of a suborganization + `playlist` | required | The Id of a playlist + + + + +## Share playlist + +Share the specified playlist of a user. + +> Example request: + +```bash +curl -X GET \ + -G "http://localhost:8000/api/v1/projects/1/playlists/1/share" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/projects/1/playlists/1/share" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +fetch(url, { + method: "GET", + headers: headers, +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->get( + 'http://localhost:8000/api/v1/projects/1/playlists/1/share', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/projects/1/playlists/1/share' +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('GET', url, headers=headers) +response.json() +``` + + +> Example response (500): + +```json +{ + "errors": [ + "Failed to share playlist." + ] +} +``` +> Example response (200): + +```json +{ + "playlist": { + "id": 1, + "title": "Math Playlist", + "order": 0, + "is_public": true, + "project_id": 1, + "gcr_playlist_visibility": true, + "project": { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "users": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@currikistudio.org", + "role": "owner" + } + ], + "is_public": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + "activities": [], + "created_at": "2020-09-07T17:01:24.000000Z", + "updated_at": "2020-09-07T17:01:24.000000Z" + } +} +``` + +### HTTP Request +`GET api/v1/projects/{project}/playlists/{playlist}/share` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `playlist` | required | The Id of a playlist + `project` | required | The Id of a project + + + + +## Remove Share playlist + +Remove Share the specified playlist of a user. + +> Example request: + +```bash +curl -X GET \ + -G "http://localhost:8000/api/v1/projects/1/playlists/1/remove-share" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/projects/1/playlists/1/remove-share" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +fetch(url, { + method: "GET", + headers: headers, +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->get( + 'http://localhost:8000/api/v1/projects/1/playlists/1/remove-share', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/projects/1/playlists/1/remove-share' +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('GET', url, headers=headers) +response.json() +``` + + +> Example response (500): + +```json +{ + "errors": [ + "Failed to remove share playlist." + ] +} +``` +> Example response (200): + +```json +{ + "playlist": { + "id": 1, + "title": "Math Playlist", + "order": 0, + "is_public": true, + "project_id": 1, + "gcr_playlist_visibility": true, + "project": { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "users": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@currikistudio.org", + "role": "owner" + } + ], + "is_public": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + "activities": [], + "created_at": "2020-09-07T17:01:24.000000Z", + "updated_at": "2020-09-07T17:01:24.000000Z" + } +} +``` + +### HTTP Request +`GET api/v1/projects/{project}/playlists/{playlist}/remove-share` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `playlist` | required | The Id of a playlist + `project` | required | The Id of a project + + + + +## Get Lti Playlist + +Get the lti playlist of a project. + +> Example request: + +```bash +curl -X GET \ + -G "http://localhost:8000/api/v1/playlists/1/lti" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/playlists/1/lti" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +fetch(url, { + method: "GET", + headers: headers, +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->get( + 'http://localhost:8000/api/v1/playlists/1/lti', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/playlists/1/lti' +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('GET', url, headers=headers) +response.json() +``` + + +> Example response (200): + +```json +{ + "playlist": { + "id": 1, + "title": "Math Playlist", + "order": 0, + "is_public": true, + "project_id": 1, + "gcr_playlist_visibility": true, + "project": { + "id": 1, + "name": "Test Project", + "description": "This is a test project.", + "thumb_url": "https:\/\/images.pexels.com\/photos\/2832382", + "shared": true, + "starter_project": null, + "users": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@currikistudio.org", + "role": "owner" + } + ], + "is_public": true, + "created_at": "2020-09-06T19:21:08.000000Z", + "updated_at": "2020-09-06T19:21:08.000000Z" + }, + "activities": [], + "created_at": "2020-09-07T17:01:24.000000Z", + "updated_at": "2020-09-07T17:01:24.000000Z" + } +} +``` + +### HTTP Request +`GET api/v1/playlists/{playlist}/lti` + +#### URL Parameters + +Parameter | Status | Description +--------- | ------- | ------- | ------- + `project` | required | The Id of a project Example 1 + + + +#5. Activity + + +APIs for activity management + +## Get Activity Search Preview + +Get the specified activity search preview. + +> Example request: + +```bash +curl -X GET \ + -G "http://localhost:8000/api/v1/suborganization/1/activities/1/search-preview" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" +``` + +```javascript +const url = new URL( + "http://localhost:8000/api/v1/suborganization/1/activities/1/search-preview" +); + +let headers = { + "Content-Type": "application/json", + "Accept": "application/json", +}; + +fetch(url, { + method: "GET", + headers: headers, +}) + .then(response => response.json()) + .then(json => console.log(json)); +``` + +```php + +$client = new \GuzzleHttp\Client(); +$response = $client->get( + 'http://localhost:8000/api/v1/suborganization/1/activities/1/search-preview', + [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ], + ] +); +$body = $response->getBody(); +print_r(json_decode((string) $body)); +``` + +```python +import requests +import json + +url = 'http://localhost:8000/api/v1/suborganization/1/activities/1/search-preview' +headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' +} +response = requests.request('GET', url, headers=headers) +response.json() +``` + + +> Example response (200): + +```json +{ + "h5p": { + "id": 59, + "title": "Science of Golf: Why Balls Have Dimples", + "params": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"},\"aspectRatio\":\"16:9\"}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\"
Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\"
They reduce wind resistance.<\/p>\\n\",\"
They make the ball more visually interesting.<\/p>\\n\",\"
They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\"
A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\"
A low pressure zone, which is what causes drag.<\/p>\\n\",\"
The ball has no spin.<\/p>\\n\",\"
The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Smooth Ball<\/p>\\n\"}],\"bookmarks\":[],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}", + "filtered": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"}}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\"
Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\"
They reduce wind resistance.<\/p>\\n\",\"
They make the ball more visually interesting.<\/p>\\n\",\"
They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\"
A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\"
A low pressure zone, which is what causes drag.<\/p>\\n\",\"
The ball has no spin.<\/p>\\n\",\"
The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Smooth Ball<\/p>\\n\"}],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}", + "slug": "science-of-golf-why-balls-have-dimples", + "user_id": 1, + "embedType": "div", + "disable": 9, + "libraryMajorVersion": 1, + "libraryMinorVersion": 21, + "authors": null, + "source": null, + "yearFrom": null, + "yearTo": null, + "licenseVersion": null, + "licenseExtras": null, + "authorComments": null, + "changes": null, + "defaultLanguage": null, + "metadata": { + "title": "Science of Golf: Why Balls Have Dimples", + "license": "U" + }, + "library": { + "id": 40, + "name": "H5P.InteractiveVideo", + "majorVersion": 1, + "minorVersion": 21, + "embedTypes": "iframe", + "fullscreen": 1 + }, + "language": "en", + "tags": "" + }, + "activity": { + "id": 1, + "playlist_id": 1, + "title": "Science of Golf: Why Balls Have Dimples", + "type": "h5p", + "content": "", + "shared": false, + "order": 2, + "thumb_url": null, + "subject_id": null, + "education_level_id": null, + "h5p_content": { + "id": 59, + "created_at": "2020-04-30T20:24:58.000000Z", + "updated_at": "2020-04-30T20:24:58.000000Z", + "user_id": 1, + "title": "Science of Golf: Why Balls Have Dimples", + "library_id": 40, + "parameters": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"},\"aspectRatio\":\"16:9\"}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\"
Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\"
They reduce wind resistance.<\/p>\\n\",\"
They make the ball more visually interesting.<\/p>\\n\",\"
They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\"
A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\"
A low pressure zone, which is what causes drag.<\/p>\\n\",\"
The ball has no spin.<\/p>\\n\",\"
The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Smooth Ball<\/p>\\n\"}],\"bookmarks\":[],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}", + "filtered": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"}}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\"
Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\"
They reduce wind resistance.<\/p>\\n\",\"
They make the ball more visually interesting.<\/p>\\n\",\"
They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\"
A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\"
A low pressure zone, which is what causes drag.<\/p>\\n\",\"
The ball has no spin.<\/p>\\n\",\"
The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"
Smooth Ball<\/p>\\n\"}],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}", + "slug": "science-of-golf-why-balls-have-dimples", + "embed_type": "div", + "disable": 9, + "content_type": null, + "authors": null, + "source": null, + "year_from": null, + "year_to": null, + "license": "U", + "license_version": null, + "license_extras": null, + "author_comments": null, + "changes": null, + "default_language": null + }, + "is_public": false, + "created_at": null, + "updated_at": null + }, + "playlist": { + "id": 1, + "title": "The Engineering & Design Behind Golf Balls", + "order": 0, + "is_public": true, + "project_id": 1, + "project": { + "id": 1, + "name": "The Science of Golf", + "description": "Uncover the science, technology, engineering, and mathematics behind the game of golf.", + "thumb_url": "\/storage\/projects\/nN5y8v8zh2ghxrKuHCv5wvJOREFw0Nr27s2DPxWq.png", + "shared": false, + "starter_project": false, + "users": [ + { + "id": 1, + "email": "john.doe@currikistudio.org", + "first_name": "John", + "last_name": "Doe", + "role": "owner" + } + ], + "is_public": true, + "created_at": "2020-04-30T20:03:12.000000Z", + "updated_at": "2020-07-11T12:51:07.000000Z" + }, + "activities": [ + { + "id": 4, + "playlist_id": 1, + "title": "Labeling Golf Ball - Principles of Physics", + "type": "h5p", + "content": "", + "shared": false, + "order": 0, + "thumb_url": null, + "subject_id": null, + "education_level_id": null, + "h5p_content": { + "id": 65, + "created_at": "2020-04-30T23:40:49.000000Z", + "updated_at": "2020-04-30T23:40:49.000000Z", + "user_id": 1, + "title": "Labeling Golf Ball - Principles of Physics", + "library_id": 19, + "parameters": "{\"scoreShow\":\"Check\",\"tryAgain\":\"Retry\",\"scoreExplanation\":\"Correct answers give +1 point. Incorrect answers give -1 point. The lowest possible score is 0.\",\"question\":{\"settings\":{\"size\":{\"width\":620,\"height\":310},\"background\":{\"path\":\"images\/background-5eab614083be2.png#tmp\",\"mime\":\"image\/png\",\"copyright\":{\"license\":\"U\"},\"width\":620,\"height\":310}},\"task\":{\"elements\":[{\"x\":0,\"y\":47.96909692035003,\"width\":7.812090416666667,\"height\":1.3537570833333332,\"dropZones\":[\"0\",\"1\",\"2\"],\"type\":{\"library\":\"H5P.AdvancedText 1.1\",\"params\":{\"text\":\"
Lift<\/p>\\n\"},\"subContentId\":\"be1d9b11-91ff-4e59-a7c6-9966e1bf8cb2\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Lift\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Lift\"}},\"backgroundOpacity\":100,\"multiple\":false},{\"x\":-4.63163666049382e-8,\"y\":58.810763796296285,\"width\":7.812090416666667,\"height\":1.3537570833333332,\"dropZones\":[\"0\",\"1\",\"2\"],\"type\":{\"library\":\"H5P.AdvancedText 1.1\",\"params\":{\"text\":\"
Drag<\/p>\\n\"},\"subContentId\":\"05a00202-b5dd-44a9-acf1-0cce77278b33\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Drag\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Drag\"}},\"backgroundOpacity\":100,\"multiple\":false},{\"x\":-4.63163666049382e-8,\"y\":36.89236101851851,\"width\":7.812090416666667,\"height\":1.281997824074074,\"dropZones\":[\"0\",\"1\",\"2\"],\"type\":{\"library\":\"H5P.AdvancedText 1.1\",\"params\":{\"text\":\"
Spin<\/p>\\n\"},\"subContentId\":\"140a5423-873b-46d4-8f4f-9b236cefce20\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Spin\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Spin\"}},\"backgroundOpacity\":100,\"multiple\":false}],\"dropZones\":[{\"x\":72.35516653328209,\"y\":14.75972212933847,\"width\":8.61111111111111,\"height\":2.511574074074074,\"correctElements\":[\"0\"],\"showLabel\":false,\"backgroundOpacity\":50,\"tipsAndFeedback\":{\"tip\":\"\"},\"single\":true,\"autoAlign\":true,\"type\":{\"library\":\"H5P.DragQuestionDropzone 0.1\"},\"label\":\"
Lift<\/p>\\n\"},\"subContentId\":\"be1d9b11-91ff-4e59-a7c6-9966e1bf8cb2\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Lift\"}},\"backgroundOpacity\":100,\"multiple\":false},{\"x\":-4.63163666049382e-8,\"y\":58.810763796296285,\"width\":7.812090416666667,\"height\":1.3537570833333332,\"dropZones\":[\"0\",\"1\",\"2\"],\"type\":{\"library\":\"H5P.AdvancedText 1.1\",\"params\":{\"text\":\"
Drag<\/p>\\n\"},\"subContentId\":\"05a00202-b5dd-44a9-acf1-0cce77278b33\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Drag\"}},\"backgroundOpacity\":100,\"multiple\":false},{\"x\":-4.63163666049382e-8,\"y\":36.89236101851851,\"width\":7.812090416666667,\"height\":1.281997824074074,\"dropZones\":[\"0\",\"1\",\"2\"],\"type\":{\"library\":\"H5P.AdvancedText 1.1\",\"params\":{\"text\":\"
Spin<\/p>\\n\"},\"subContentId\":\"140a5423-873b-46d4-8f4f-9b236cefce20\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Spin\"}},\"backgroundOpacity\":100,\"multiple\":false}],\"dropZones\":[{\"x\":72.35516653328209,\"y\":14.75972212933847,\"width\":8.61111111111111,\"height\":2.511574074074074,\"correctElements\":[\"0\"],\"showLabel\":false,\"backgroundOpacity\":50,\"tipsAndFeedback\":{\"tip\":\"\"},\"single\":true,\"autoAlign\":true,\"label\":\"
Acceleration is the measurement of the change <\/span><\/span><\/span>in an object\\u2019s velocity. <\/span><\/span><\/span><\/p>\\n\"},\"library\":\"H5P.AdvancedText 1.1\",\"subContentId\":\"97578055-d386-46be-afe3-c19eae4108aa\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Acceleration\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Acceleration\"}},\"title\":\"Acceleration\"},{\"content\":{\"params\":{\"text\":\" The faster the air moves, the less pressure it exerts.<\/span><\/span><\/span><\/p>\\n\"},\"library\":\"H5P.AdvancedText 1.1\",\"subContentId\":\"0ce32fbf-4ff1-465b-9c50-8876c5fef34d\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Bernoulli\\u2019s Principle\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Bernoulli\\u2019s Principle\"}},\"title\":\"Bernoulli\\u2019s Principle\"},{\"content\":{\"params\":{\"text\":\" A vector is a quantity that has both a magnitude and a direction.<\/span><\/span><\/span><\/span><\/p>\\n\"},\"library\":\"H5P.AdvancedText 1.1\",\"subContentId\":\"cead752e-0c29-4acb-b9ae-2f61a3cd5c9b\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Vector\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Vector\"}},\"title\":\"Vector\"},{\"content\":{\"params\":{\"text\":\" Drag is the force that acts opposite to the direction of motion. Drag is caused by friction and differences in air pressure.<\/span><\/span><\/span><\/span><\/p>\\n\"},\"library\":\"H5P.AdvancedText 1.1\",\"subContentId\":\"6ae4b819-276d-405e-b085-e894c31484d3\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Drag\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Drag\"}},\"title\":\"Drag\"},{\"content\":{\"params\":{\"text\":\" A turbulent flow is one in which the particles have irregular, fluctuating motions and erratic paths.<\/span><\/span><\/span><\/span><\/span><\/p>\\n\"},\"library\":\"H5P.AdvancedText 1.1\",\"subContentId\":\"f9f63fdd-0a8a-4259-a3f1-ca7271b51727\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Turbulent airflow\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Turbulent airflow\"}},\"title\":\"Turbulent airflow\"},{\"content\":{\"params\":{\"text\":\" Friction is the resistance of motion when one object rubs against another. It is a force and is measured in newtons.<\/span><\/span><\/span><\/p>\\n\"},\"library\":\"H5P.AdvancedText 1.1\",\"subContentId\":\"236c832f-f754-47d6-8d2c-1311a354d861\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Friction\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Friction\"}},\"title\":\"Friction\"}],\"hTag\":\"h2\"}",
+ "filtered": "{\"panels\":[{\"content\":{\"params\":{\"text\":\" Acceleration is the measurement of the change <\/span><\/span><\/span>in an object\\u2019s velocity. <\/span><\/span><\/span><\/p>\\n\"},\"library\":\"H5P.AdvancedText 1.1\",\"subContentId\":\"97578055-d386-46be-afe3-c19eae4108aa\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Acceleration\"}},\"title\":\"Acceleration\"},{\"content\":{\"params\":{\"text\":\" The faster the air moves, the less pressure it exerts.<\/span><\/span><\/span><\/p>\\n\"},\"library\":\"H5P.AdvancedText 1.1\",\"subContentId\":\"0ce32fbf-4ff1-465b-9c50-8876c5fef34d\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Bernoulli\\u2019s Principle\"}},\"title\":\"Bernoulli\\u2019s Principle\"},{\"content\":{\"params\":{\"text\":\" A vector is a quantity that has both a magnitude and a direction.<\/span><\/span><\/span><\/span><\/p>\\n\"},\"library\":\"H5P.AdvancedText 1.1\",\"subContentId\":\"cead752e-0c29-4acb-b9ae-2f61a3cd5c9b\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Vector\"}},\"title\":\"Vector\"},{\"content\":{\"params\":{\"text\":\" Drag is the force that acts opposite to the direction of motion. Drag is caused by friction and differences in air pressure.<\/span><\/span><\/span><\/span><\/p>\\n\"},\"library\":\"H5P.AdvancedText 1.1\",\"subContentId\":\"6ae4b819-276d-405e-b085-e894c31484d3\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Drag\"}},\"title\":\"Drag\"},{\"content\":{\"params\":{\"text\":\" A turbulent flow is one in which the particles have irregular, fluctuating motions and erratic paths.<\/span><\/span><\/span><\/span><\/span><\/p>\\n\"},\"library\":\"H5P.AdvancedText 1.1\",\"subContentId\":\"f9f63fdd-0a8a-4259-a3f1-ca7271b51727\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Turbulent airflow\"}},\"title\":\"Turbulent airflow\"},{\"content\":{\"params\":{\"text\":\" Friction is the resistance of motion when one object rubs against another. It is a force and is measured in newtons.<\/span><\/span><\/span><\/p>\\n\"},\"library\":\"H5P.AdvancedText 1.1\",\"subContentId\":\"236c832f-f754-47d6-8d2c-1311a354d861\",\"metadata\":{\"contentType\":\"Text\",\"license\":\"U\",\"title\":\"Friction\"}},\"title\":\"Friction\"}],\"hTag\":\"h2\"}",
+ "slug": "physics-vocabulary-study-guide",
+ "embed_type": "div",
+ "disable": 9,
+ "content_type": null,
+ "authors": null,
+ "source": null,
+ "year_from": null,
+ "year_to": null,
+ "license": "U",
+ "license_version": null,
+ "license_extras": null,
+ "author_comments": null,
+ "changes": null,
+ "default_language": null
+ },
+ "is_public": false,
+ "created_at": null,
+ "updated_at": null
+ },
+ {
+ "id": 1,
+ "playlist_id": 1,
+ "title": "Science of Golf: Why Balls Have Dimples",
+ "type": "h5p",
+ "content": "",
+ "shared": false,
+ "order": 2,
+ "thumb_url": null,
+ "subject_id": null,
+ "education_level_id": null,
+ "h5p_content": {
+ "id": 59,
+ "created_at": "2020-04-30T20:24:58.000000Z",
+ "updated_at": "2020-04-30T20:24:58.000000Z",
+ "user_id": 1,
+ "title": "Science of Golf: Why Balls Have Dimples",
+ "library_id": 40,
+ "parameters": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"},\"aspectRatio\":\"16:9\"}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\" Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\" They reduce wind resistance.<\/p>\\n\",\" They make the ball more visually interesting.<\/p>\\n\",\" They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\" A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\" A low pressure zone, which is what causes drag.<\/p>\\n\",\" The ball has no spin.<\/p>\\n\",\" The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Smooth Ball<\/p>\\n\"}],\"bookmarks\":[],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}",
+ "filtered": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"}}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\" Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\" They reduce wind resistance.<\/p>\\n\",\" They make the ball more visually interesting.<\/p>\\n\",\" They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\" A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\" A low pressure zone, which is what causes drag.<\/p>\\n\",\" The ball has no spin.<\/p>\\n\",\" The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Smooth Ball<\/p>\\n\"}],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}",
+ "slug": "science-of-golf-why-balls-have-dimples",
+ "embed_type": "div",
+ "disable": 9,
+ "content_type": null,
+ "authors": null,
+ "source": null,
+ "year_from": null,
+ "year_to": null,
+ "license": "U",
+ "license_version": null,
+ "license_extras": null,
+ "author_comments": null,
+ "changes": null,
+ "default_language": null
+ },
+ "is_public": false,
+ "created_at": null,
+ "updated_at": null
+ },
+ {
+ "id": 2,
+ "playlist_id": 1,
+ "title": "Physics and Golf Balls",
+ "type": "h5p",
+ "content": "",
+ "shared": false,
+ "order": 3,
+ "thumb_url": null,
+ "subject_id": null,
+ "education_level_id": null,
+ "h5p_content": {
+ "id": 60,
+ "created_at": "2020-04-30T20:31:11.000000Z",
+ "updated_at": "2020-04-30T20:31:11.000000Z",
+ "user_id": 1,
+ "title": "Physics and Golf Balls",
+ "library_id": 60,
+ "parameters": "{\"cards\":[{\"text\":\"Is the measurement of the change in an object\\u2019s velocity called Speed or Acceleration?\",\"answer\":\"Acceleration\",\"image\":{\"path\":\"images\/image-5eab35098aaf0.png#tmp\",\"mime\":\"image\/png\",\"copyright\":{\"license\":\"U\"},\"width\":1280,\"height\":720},\"tip\":\"\"},{\"text\":\"Dimples reduce wind resistance or aerodynamic drag. Does that make the ball go farther or faster?\",\"answer\":\"Farther\",\"image\":{\"path\":\"images\/image-5eab355f7ca78.jpg#tmp\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":1280,\"height\":720},\"tip\":\"\"},{\"text\":\"Do dimples on a ball increase or decrease the lift?\",\"answer\":\"Increase\",\"image\":{\"path\":\"images\/image-5eab3589be9e3.jpg#tmp\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":634,\"height\":508},\"tip\":\"\"}],\"progressText\":\"Card @card of @total\",\"next\":\"Next\",\"previous\":\"Previous\",\"checkAnswerText\":\"Check\",\"showSolutionsRequiresInput\":true,\"defaultAnswerText\":\"Your answer\",\"correctAnswerText\":\"Correct\",\"incorrectAnswerText\":\"Incorrect\",\"showSolutionText\":\"Correct answer\",\"results\":\"Results\",\"ofCorrect\":\"@score of @total correct\",\"showResults\":\"Show results\",\"answerShortText\":\"A:\",\"retry\":\"Retry\",\"caseSensitive\":false,\"cardAnnouncement\":\"Incorrect answer. Correct answer was @answer\",\"pageAnnouncement\":\"Page @current of @total\",\"description\":\"See if you can remember what you learned!\"}",
+ "filtered": "{\"cards\":[{\"text\":\"Is the measurement of the change in an object\\u2019s velocity called Speed or Acceleration?\",\"answer\":\"Acceleration\",\"image\":{\"path\":\"images\/image-5eab35098aaf0.png\",\"mime\":\"image\/png\",\"copyright\":{\"license\":\"U\"},\"width\":1280,\"height\":720},\"tip\":\"\"},{\"text\":\"Dimples reduce wind resistance or aerodynamic drag. Does that make the ball go farther or faster?\",\"answer\":\"Farther\",\"image\":{\"path\":\"images\/image-5eab355f7ca78.jpg\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":1280,\"height\":720},\"tip\":\"\"},{\"text\":\"Do dimples on a ball increase or decrease the lift?\",\"answer\":\"Increase\",\"image\":{\"path\":\"images\/image-5eab3589be9e3.jpg\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":634,\"height\":508},\"tip\":\"\"}],\"progressText\":\"Card @card of @total\",\"next\":\"Next\",\"previous\":\"Previous\",\"checkAnswerText\":\"Check\",\"showSolutionsRequiresInput\":true,\"defaultAnswerText\":\"Your answer\",\"correctAnswerText\":\"Correct\",\"incorrectAnswerText\":\"Incorrect\",\"showSolutionText\":\"Correct answer\",\"results\":\"Results\",\"ofCorrect\":\"@score of @total correct\",\"showResults\":\"Show results\",\"answerShortText\":\"A:\",\"retry\":\"Retry\",\"caseSensitive\":false,\"cardAnnouncement\":\"Incorrect answer. Correct answer was @answer\",\"pageAnnouncement\":\"Page @current of @total\",\"description\":\"See if you can remember what you learned!\"}",
+ "slug": "physics-and-golf-balls",
+ "embed_type": "div",
+ "disable": 9,
+ "content_type": null,
+ "authors": null,
+ "source": null,
+ "year_from": null,
+ "year_to": null,
+ "license": "U",
+ "license_version": null,
+ "license_extras": null,
+ "author_comments": null,
+ "changes": null,
+ "default_language": null
+ },
+ "is_public": false,
+ "created_at": null,
+ "updated_at": null
+ },
+ {
+ "id": 6,
+ "playlist_id": 1,
+ "title": "Understanding Gear Effect | Equipment and Tech | 18Birdies",
+ "type": "h5p",
+ "content": "",
+ "shared": false,
+ "order": 4,
+ "thumb_url": null,
+ "subject_id": null,
+ "education_level_id": null,
+ "h5p_content": {
+ "id": 75,
+ "created_at": "2020-05-01T04:51:11.000000Z",
+ "updated_at": "2020-05-01T04:51:11.000000Z",
+ "user_id": 1,
+ "title": "Understanding Gear Effect | Equipment and Tech | 18Birdies",
+ "library_id": 40,
+ "parameters": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/www.youtube.com\/watch?v=FdH0JQL5E-U&list=PLVIShUJLAj0rWw3Yr3VtFGH4IbIVMfQFo\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"},\"aspectRatio\":\"16:9\"}]},\"assets\":{\"interactions\":[{\"x\":46.87499999999999,\"y\":44.44444444444444,\"width\":10,\"height\":10,\"duration\":{\"from\":52,\"to\":52},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"c9f0c83d-2ba2-4810-843a-1ee7bec2076f\",\"question\":\" \\\"Torque\\\" is a property of golf shafts that describes how much the shaft is prone to twisting during the golf swing.<\/p>\\n\",\"answers\":[\" True<\/p>\\n\",\" False<\/p>\\n\"]},{\"subContentId\":\"81f2e02c-0f04-44a3-922c-4eac61a11acb\",\"question\":\" ... A shaft with a _____ torque rating means the shaft better resists twisting; a shaft with a ____ torque rating means the shaft is more prone to twisting (all other things being equal).<\/p>\\n\",\"answers\":[\" lower, higher<\/p>\\n\",\" higher, lower<\/p>\\n\",\" sharper, duller<\/p>\\n\",\" straigher, curved<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"eadebb1e-891e-4ff3-8676-943c2616a9e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Untitled Single Choice Set\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Untitled Single Choice Set\"}},\"pause\":true,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"\"},{\"x\":46.87499999999999,\"y\":44.44444444444444,\"width\":10,\"height\":10,\"duration\":{\"from\":24.314,\"to\":34.314},\"libraryTitle\":\"Statements\",\"action\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"7bce98af-5267-4ca6-a08c-0c8f2bef5afb\",\"summary\":[\"Gear effect is the term used to explain how and why hitting the ball off-center changes the ball flight.\\n\",\" Gear effect is the term used to explain how and why it is imprtant to adjust the pressure on the clubhead.<\/p>\\n\",\" Gear effect is the term used to explain how and why it is imprtant to ride your bike to the course.<\/p>\\n\"],\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"3b954191-ad43-452c-95c3-868047eb55be\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Untitled Summary\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"}},\"label\":\"\"},{\"x\":46.87499999999999,\"y\":44.44444444444444,\"width\":10,\"height\":10,\"duration\":{\"from\":145.688,\"to\":155.688},\"libraryTitle\":\"Multiple Choice\",\"action\":{\"library\":\"H5P.MultiChoice 1.14\",\"params\":{\"media\":{\"type\":{\"params\":{}},\"disableImageZooming\":false},\"answers\":[{\"correct\":true,\"tipsAndFeedback\":{\"tip\":\"\",\"chosenFeedback\":\"\",\"notChosenFeedback\":\"\"},\"text\":\" When a ball is spinning in a clockwise direction, there is high pressure on the left hand side of the ball, and low pressure on the right.<\/p>\\n\"},\"subContentId\":\"df5e99b0-6513-4aa9-a760-e3d9e2bfefe9\",\"metadata\":{\"contentType\":\"Multiple Choice\",\"license\":\"U\",\"title\":\"Untitled Multiple Choice\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Untitled Multiple Choice\"}},\"pause\":true,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"\"}],\"bookmarks\":[],\"endscreens\":[{\"time\":358,\"label\":\"5:58 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"64506cb8-ea40-4c72-8c98-ed0bb3c3b808\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"b8eb5a4d-5e2e-4b74-95f5-ca37d1a45186\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":true,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false,\"startVideoAt\":37},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}",
+ "filtered": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/www.youtube.com\/watch?v=FdH0JQL5E-U&list=PLVIShUJLAj0rWw3Yr3VtFGH4IbIVMfQFo\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"}}]},\"assets\":{\"interactions\":[{\"x\":46.87499999999999,\"y\":44.44444444444444,\"width\":10,\"height\":10,\"duration\":{\"from\":52,\"to\":52},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"c9f0c83d-2ba2-4810-843a-1ee7bec2076f\",\"question\":\" \\\"Torque\\\" is a property of golf shafts that describes how much the shaft is prone to twisting during the golf swing.<\/p>\\n\",\"answers\":[\" True<\/p>\\n\",\" False<\/p>\\n\"]},{\"subContentId\":\"81f2e02c-0f04-44a3-922c-4eac61a11acb\",\"question\":\" ... A shaft with a _____ torque rating means the shaft better resists twisting; a shaft with a ____ torque rating means the shaft is more prone to twisting (all other things being equal).<\/p>\\n\",\"answers\":[\" lower, higher<\/p>\\n\",\" higher, lower<\/p>\\n\",\" sharper, duller<\/p>\\n\",\" straigher, curved<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"eadebb1e-891e-4ff3-8676-943c2616a9e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Untitled Single Choice Set\"}},\"pause\":true,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"\"},{\"x\":46.87499999999999,\"y\":44.44444444444444,\"width\":10,\"height\":10,\"duration\":{\"from\":24.314,\"to\":34.314},\"libraryTitle\":\"Statements\",\"action\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"7bce98af-5267-4ca6-a08c-0c8f2bef5afb\",\"summary\":[\"Gear effect is the term used to explain how and why hitting the ball off-center changes the ball flight.\\n\",\" Gear effect is the term used to explain how and why it is imprtant to adjust the pressure on the clubhead.<\/p>\\n\",\" Gear effect is the term used to explain how and why it is imprtant to ride your bike to the course.<\/p>\\n\"],\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"3b954191-ad43-452c-95c3-868047eb55be\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"}},\"label\":\"\"},{\"x\":46.87499999999999,\"y\":44.44444444444444,\"width\":10,\"height\":10,\"duration\":{\"from\":145.688,\"to\":155.688},\"libraryTitle\":\"Multiple Choice\",\"action\":{\"library\":\"H5P.MultiChoice 1.14\",\"params\":{\"media\":{\"disableImageZooming\":false},\"answers\":[{\"correct\":true,\"tipsAndFeedback\":{\"tip\":\"\",\"chosenFeedback\":\"\",\"notChosenFeedback\":\"\"},\"text\":\" When a ball is spinning in a clockwise direction, there is high pressure on the left hand side of the ball, and low pressure on the right.<\/p>\\n\"},\"subContentId\":\"df5e99b0-6513-4aa9-a760-e3d9e2bfefe9\",\"metadata\":{\"contentType\":\"Multiple Choice\",\"license\":\"U\",\"title\":\"Untitled Multiple Choice\"}},\"pause\":true,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\"\"}],\"endscreens\":[{\"time\":358,\"label\":\"5:58 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"64506cb8-ea40-4c72-8c98-ed0bb3c3b808\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"b8eb5a4d-5e2e-4b74-95f5-ca37d1a45186\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":true,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false,\"startVideoAt\":37},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}",
+ "slug": "understanding-gear-effect-equipment-and-tech-18birdies",
+ "embed_type": "div",
+ "disable": 9,
+ "content_type": null,
+ "authors": null,
+ "source": null,
+ "year_from": null,
+ "year_to": null,
+ "license": "U",
+ "license_version": null,
+ "license_extras": null,
+ "author_comments": null,
+ "changes": null,
+ "default_language": null
+ },
+ "is_public": false,
+ "created_at": null,
+ "updated_at": null
+ },
+ {
+ "id": 5,
+ "playlist_id": 1,
+ "title": "The Evolution of the Golf Ball",
+ "type": "h5p",
+ "content": "",
+ "shared": false,
+ "order": 5,
+ "thumb_url": null,
+ "subject_id": null,
+ "education_level_id": null,
+ "h5p_content": {
+ "id": 66,
+ "created_at": "2020-04-30T23:58:44.000000Z",
+ "updated_at": "2020-04-30T23:58:44.000000Z",
+ "user_id": 1,
+ "title": "The Evolution of the Golf Ball",
+ "library_id": 61,
+ "parameters": "{\"timeline\":{\"defaultZoomLevel\":\"0\",\"height\":600,\"asset\":{},\"date\":[{\"asset\":{\"thumbnail\":{\"path\":\"images\/thumbnail-5eab648fb61c9.jpeg#tmp\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":234,\"height\":216}},\"startDate\":\"1400\",\"endDate\":\"2020\",\"headline\":\"Origins of Golf\",\"text\":\" Golf is recorded in its first recognizable form in the Eastern Coast of Scotland.<\/p>\\n\"},{\"asset\":{\"thumbnail\":{\"path\":\"images\/thumbnail-5eab64e26de00.jpg#tmp\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":475,\"height\":222}},\"startDate\":\"1600\",\"headline\":\"Wood Golf Balls\",\"text\":\" The first known golf ball was made out of wood, most likely beech, boxroot and similar hardwoods. Wooden clubs were the golf club of choice, which in conjunction with the wood balls would have made your friendly game of golf a rather jarring experience.<\/p>\\n\"},{\"asset\":{\"thumbnail\":{\"path\":\"images\/thumbnail-5eab652f19393.png#tmp\",\"mime\":\"image\/png\",\"copyright\":{\"license\":\"U\"},\"width\":1128,\"height\":1096}},\"startDate\":\"1618\",\"headline\":\"Feathery Golf Balls\",\"text\":\" The first \\\"real\\\" golf ball was known as a \\\"feathery\\\"golf ball. Basically, the feathery was a leather sack filled with boiled goose feathers, then stitched up and painted. Feathery golf balls were expensive to make easily damaged and only the privileged few could afford to use them. <\/p>\\n\\n It was made of cow or horsehide which was stuffed with feathers; most often goose feather. The leather, in order to be easier to work with, was soaked in water. The feathers that were forced into the ball by using a specially designed crutch-handled filling rod were soaked as well. <\/p>\\n\\n After the ball was carefully hand sewn together, it was left to dry. While the leather shrank, the feathers expanded, which made the ball very hard and compact. <\/p>\\n\\n Interestingly, the featherie also had excellent flight characteristics as it could reach a distance of up to 175 yards; although the longest recorded distance is more than 361 yards. In the mid-19th century, most people could only dream of playing golf. There were at the time fewer than 20 golf clubs around the world, with just three being outside Scotland. But that was not the only thing that prevented most people from playing golf. The high cost of golf essentials, especially of golf balls, made the game pretty much inaccessible to ordinary people.31 But that was soon about to change... It wasn't until 1848 that Rev. Dr. Robert Adams began creating golf balls out of Gutta Percha \\\"Gutty\\\". The Gutty golf ball was created from the dried sap of the Sapodilla tree. It had a rubber-like feel and was formed into ball shapes by heating it up and shaping it while hot. <\/p>\\n\\n The arrival of the gutta percha ball or \\\"gutty\\\", as it was called, revolutionized the game of golf and allowed its spread to the masses due to its affordability, playability and durability.<\/p>\\n\"},{\"asset\":{},\"startDate\":\"1899\",\"headline\":\"Hand Hammered Gutta Ball\",\"text\":\" American businessman and inventor Coburn Haskell (1868-1922) got a (joint) patent from the United States Patent Office for the rubber-wound ball47 which would soon lead to another revolution in golf. Widely regarded as the first modern golf ball, Haskell\\u2019s ball was made of a solid rubber-wound core that was covered by guttapercha.<\/p>\\n\"}],\"language\":\"en\",\"headline\":\"The Evolution of the Golf Ball\",\"text\":\" Golf is recorded in its first recognizable form in the Eastern Coast of Scotland.<\/p>\\n\"},{\"asset\":{\"thumbnail\":{\"path\":\"images\/thumbnail-5eab64e26de00.jpg\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":475,\"height\":222}},\"startDate\":\"1600\",\"headline\":\"Wood Golf Balls\",\"text\":\" The first known golf ball was made out of wood, most likely beech, boxroot and similar hardwoods. Wooden clubs were the golf club of choice, which in conjunction with the wood balls would have made your friendly game of golf a rather jarring experience.<\/p>\\n\"},{\"asset\":{\"thumbnail\":{\"path\":\"images\/thumbnail-5eab652f19393.png\",\"mime\":\"image\/png\",\"copyright\":{\"license\":\"U\"},\"width\":1128,\"height\":1096}},\"startDate\":\"1618\",\"headline\":\"Feathery Golf Balls\",\"text\":\" The first \\\"real\\\" golf ball was known as a \\\"feathery\\\"golf ball. Basically, the feathery was a leather sack filled with boiled goose feathers, then stitched up and painted. Feathery golf balls were expensive to make easily damaged and only the privileged few could afford to use them. <\/p>\\n\\n It was made of cow or horsehide which was stuffed with feathers; most often goose feather. The leather, in order to be easier to work with, was soaked in water. The feathers that were forced into the ball by using a specially designed crutch-handled filling rod were soaked as well. <\/p>\\n\\n After the ball was carefully hand sewn together, it was left to dry. While the leather shrank, the feathers expanded, which made the ball very hard and compact. <\/p>\\n\\n Interestingly, the featherie also had excellent flight characteristics as it could reach a distance of up to 175 yards; although the longest recorded distance is more than 361 yards. In the mid-19th century, most people could only dream of playing golf. There were at the time fewer than 20 golf clubs around the world, with just three being outside Scotland. But that was not the only thing that prevented most people from playing golf. The high cost of golf essentials, especially of golf balls, made the game pretty much inaccessible to ordinary people.31 But that was soon about to change... It wasn't until 1848 that Rev. Dr. Robert Adams began creating golf balls out of Gutta Percha \\\"Gutty\\\". The Gutty golf ball was created from the dried sap of the Sapodilla tree. It had a rubber-like feel and was formed into ball shapes by heating it up and shaping it while hot. <\/p>\\n\\n The arrival of the gutta percha ball or \\\"gutty\\\", as it was called, revolutionized the game of golf and allowed its spread to the masses due to its affordability, playability and durability.<\/p>\\n\"},{\"asset\":{},\"startDate\":\"1899\",\"headline\":\"Hand Hammered Gutta Ball\",\"text\":\" American businessman and inventor Coburn Haskell (1868-1922) got a (joint) patent from the United States Patent Office for the rubber-wound ball47 which would soon lead to another revolution in golf. Widely regarded as the first modern golf ball, Haskell\\u2019s ball was made of a solid rubber-wound core that was covered by guttapercha.<\/p>\\n\"}],\"language\":\"en\",\"headline\":\"The Evolution of the Golf Ball\",\"text\":\" Mickey Mantle Mickey Mantle Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\" They reduce wind resistance.<\/p>\\n\",\" They make the ball more visually interesting.<\/p>\\n\",\" They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\" A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\" A low pressure zone, which is what causes drag.<\/p>\\n\",\" The ball has no spin.<\/p>\\n\",\" The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Smooth Ball<\/p>\\n\"}],\"bookmarks\":[],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}",
+ "filtered": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"}}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\" Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\" They reduce wind resistance.<\/p>\\n\",\" They make the ball more visually interesting.<\/p>\\n\",\" They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\" A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\" A low pressure zone, which is what causes drag.<\/p>\\n\",\" The ball has no spin.<\/p>\\n\",\" The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Smooth Ball<\/p>\\n\"}],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}",
+ "slug": "science-of-golf-why-balls-have-dimples",
+ "embed_type": "div",
+ "disable": 9,
+ "content_type": null,
+ "authors": null,
+ "source": null,
+ "year_from": null,
+ "year_to": null,
+ "license": "U",
+ "license_version": null,
+ "license_extras": null,
+ "author_comments": null,
+ "changes": null,
+ "default_language": null,
+ "library": {
+ "id": 40,
+ "created_at": null,
+ "updated_at": null,
+ "name": "H5P.InteractiveVideo",
+ "title": "Interactive Video",
+ "major_version": 1,
+ "minor_version": 21,
+ "patch_version": 9,
+ "runnable": 1,
+ "restricted": 0,
+ "fullscreen": 1,
+ "embed_types": "iframe",
+ "preloaded_js": "dist\/h5p-interactive-video.js",
+ "preloaded_css": "dist\/h5p-interactive-video.css",
+ "drop_library_css": "",
+ "semantics": "[\n {\n \"name\": \"interactiveVideo\",\n \"type\": \"group\",\n \"widget\": \"wizard\",\n \"label\": \"Interactive Video Editor\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"video\",\n \"type\": \"group\",\n \"label\": \"Upload\/embed video\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"files\",\n \"type\": \"video\",\n \"label\": \"Add a video\",\n \"importance\": \"high\",\n \"description\": \"Click below to add a video you wish to use in your interactive video. You can add a video link or upload video files. It is possible to add several versions of the video with different qualities. To ensure maximum support in browsers at least add a version in webm and mp4 formats.\",\n \"extraAttributes\": [\n \"metadata\"\n ],\n \"enableCustomQualityLabel\": true\n },\n {\n \"name\": \"startScreenOptions\",\n \"type\": \"group\",\n \"label\": \"Start screen options (unsupported for YouTube videos)\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"title\",\n \"type\": \"text\",\n \"label\": \"The title of this interactive video\",\n \"importance\": \"low\",\n \"maxLength\": 60,\n \"default\": \"Interactive Video\",\n \"description\": \"Used in summaries, statistics etc.\"\n },\n {\n \"name\": \"hideStartTitle\",\n \"type\": \"boolean\",\n \"label\": \"Hide title on video start screen\",\n \"importance\": \"low\",\n \"optional\": true,\n \"default\": false\n },\n {\n \"name\": \"shortStartDescription\",\n \"type\": \"text\",\n \"label\": \"Short description (Optional)\",\n \"importance\": \"low\",\n \"optional\": true,\n \"maxLength\": 120,\n \"description\": \"Optional. Display a short description text on the video start screen. Does not work for YouTube videos.\"\n },\n {\n \"name\": \"poster\",\n \"type\": \"image\",\n \"label\": \"Poster image\",\n \"importance\": \"low\",\n \"optional\": true,\n \"description\": \"Image displayed before the user launches the video. Does not work for YouTube Videos.\"\n }\n ]\n },\n {\n \"name\": \"textTracks\",\n \"type\": \"group\",\n \"label\": \"Text tracks (unsupported for YouTube videos)\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"videoTrack\",\n \"type\": \"list\",\n \"label\": \"Available text tracks\",\n \"importance\": \"low\",\n \"optional\": true,\n \"entity\": \"Track\",\n \"min\": 0,\n \"defaultNum\": 1,\n \"field\": {\n \"name\": \"track\",\n \"type\": \"group\",\n \"label\": \"Track\",\n \"importance\": \"low\",\n \"expanded\": false,\n \"fields\": [\n {\n \"name\": \"label\",\n \"type\": \"text\",\n \"label\": \"Track label\",\n \"description\": \"Used if you offer multiple tracks and the user has to choose a track. For instance 'Spanish subtitles' could be the label of a Spanish subtitle track.\",\n \"importance\": \"low\",\n \"default\": \"Subtitles\",\n \"optional\": true\n },\n {\n \"name\": \"kind\",\n \"type\": \"select\",\n \"label\": \"Type of text track\",\n \"importance\": \"low\",\n \"default\": \"subtitles\",\n \"options\": [\n {\n \"value\": \"subtitles\",\n \"label\": \"Subtitles\"\n },\n {\n \"value\": \"captions\",\n \"label\": \"Captions\"\n },\n {\n \"value\": \"descriptions\",\n \"label\": \"Descriptions\"\n }\n ]\n },\n {\n \"name\": \"srcLang\",\n \"type\": \"text\",\n \"label\": \"Source language, must be defined for subtitles\",\n \"importance\": \"low\",\n \"default\": \"en\",\n \"description\": \"Must be a valid BCP 47 language tag. If 'Subtitles' is the type of text track selected, the source language of the track must be defined.\"\n },\n {\n \"name\": \"track\",\n \"type\": \"file\",\n \"label\": \"Track source (WebVTT file)\",\n \"importance\": \"low\"\n }\n ]\n }\n },\n {\n \"name\": \"defaultTrackLabel\",\n \"type\": \"text\",\n \"label\": \"Default text track\",\n \"description\": \"If left empty or not matching any of the text tracks the first text track will be used as the default.\",\n \"importance\": \"low\",\n \"optional\": true\n }\n ]\n }\n ]\n },\n {\n \"name\": \"assets\",\n \"type\": \"group\",\n \"label\": \"Add interactions\",\n \"importance\": \"high\",\n \"widget\": \"interactiveVideo\",\n \"video\": \"video\/files\",\n \"poster\": \"video\/startScreenOptions\/poster\",\n \"fields\": [\n {\n \"name\": \"interactions\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"interaction\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"duration\",\n \"type\": \"group\",\n \"widget\": \"duration\",\n \"label\": \"Display time\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"from\",\n \"type\": \"number\"\n },\n {\n \"name\": \"to\",\n \"type\": \"number\"\n }\n ]\n },\n {\n \"name\": \"pause\",\n \"label\": \"Pause video\",\n \"importance\": \"low\",\n \"type\": \"boolean\"\n },\n {\n \"name\": \"displayType\",\n \"label\": \"Display as\",\n \"importance\": \"low\",\n \"description\": \"Button<\/b> is a collapsed interaction the user must press to open. Poster<\/b> is an expanded interaction displayed directly on top of the video\",\n \"type\": \"select\",\n \"widget\": \"imageRadioButtonGroup\",\n \"options\": [\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"poster\",\n \"label\": \"Poster\"\n }\n ],\n \"default\": \"button\"\n },\n {\n \"name\": \"buttonOnMobile\",\n \"label\": \"Turn into button on small screens\",\n \"importance\": \"low\",\n \"type\": \"boolean\",\n \"default\": false\n },\n {\n \"name\": \"label\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"label\": \"Label\",\n \"importance\": \"low\",\n \"description\": \"Label displayed next to interaction icon.\",\n \"optional\": true,\n \"enterMode\": \"p\",\n \"tags\": [\n \"p\"\n ]\n },\n {\n \"name\": \"x\",\n \"type\": \"number\",\n \"importance\": \"low\",\n \"widget\": \"none\"\n },\n {\n \"name\": \"y\",\n \"type\": \"number\",\n \"importance\": \"low\",\n \"widget\": \"none\"\n },\n {\n \"name\": \"width\",\n \"type\": \"number\",\n \"widget\": \"none\",\n \"importance\": \"low\",\n \"optional\": true\n },\n {\n \"name\": \"height\",\n \"type\": \"number\",\n \"widget\": \"none\",\n \"importance\": \"low\",\n \"optional\": true\n },\n {\n \"name\": \"libraryTitle\",\n \"type\": \"text\",\n \"importance\": \"low\",\n \"optional\": true,\n \"widget\": \"none\"\n },\n {\n \"name\": \"action\",\n \"type\": \"library\",\n \"importance\": \"low\",\n \"options\": [\n \"H5P.Nil 1.0\",\n \"H5P.Text 1.1\",\n \"H5P.Table 1.1\",\n \"H5P.Link 1.3\",\n \"H5P.Image 1.1\",\n \"H5P.Summary 1.10\",\n \"H5P.SingleChoiceSet 1.11\",\n \"H5P.MultiChoice 1.14\",\n \"H5P.TrueFalse 1.6\",\n \"H5P.Blanks 1.12\",\n \"H5P.DragQuestion 1.13\",\n \"H5P.MarkTheWords 1.9\",\n \"H5P.DragText 1.8\",\n \"H5P.GoToQuestion 1.3\",\n \"H5P.IVHotspot 1.2\",\n \"H5P.Questionnaire 1.2\",\n \"H5P.FreeTextQuestion 1.0\"\n ]\n },\n {\n \"name\": \"adaptivity\",\n \"type\": \"group\",\n \"label\": \"Adaptivity\",\n \"importance\": \"low\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"correct\",\n \"type\": \"group\",\n \"label\": \"Action on all correct\",\n \"fields\": [\n {\n \"name\": \"seekTo\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Seek to\",\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"allowOptOut\",\n \"type\": \"boolean\",\n \"label\": \"Allow the user to opt out and continue\"\n },\n {\n \"name\": \"message\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"enterMode\": \"p\",\n \"tags\": [\n \"strong\",\n \"em\",\n \"del\",\n \"a\",\n \"code\"\n ],\n \"label\": \"Message\"\n },\n {\n \"name\": \"seekLabel\",\n \"type\": \"text\",\n \"label\": \"Label for seek button\"\n }\n ]\n },\n {\n \"name\": \"wrong\",\n \"type\": \"group\",\n \"label\": \"Action on wrong\",\n \"fields\": [\n {\n \"name\": \"seekTo\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Seek to\",\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"allowOptOut\",\n \"type\": \"boolean\",\n \"label\": \"Allow the user to opt out and continue\"\n },\n {\n \"name\": \"message\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"enterMode\": \"p\",\n \"tags\": [\n \"strong\",\n \"em\",\n \"del\",\n \"a\",\n \"code\"\n ],\n \"label\": \"Message\"\n },\n {\n \"name\": \"seekLabel\",\n \"type\": \"text\",\n \"label\": \"Label for seek button\"\n }\n ]\n },\n {\n \"name\": \"requireCompletion\",\n \"type\": \"boolean\",\n \"label\": \"Require full score for task before proceeding\",\n \"description\": \"For best functionality this option should be used in conjunction with the \\\"Prevent skipping forward in a video\\\" option of Interactive Video.\"\n }\n ]\n },\n {\n \"name\": \"visuals\",\n \"label\": \"Visuals\",\n \"importance\": \"low\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"backgroundColor\",\n \"type\": \"text\",\n \"label\": \"Background color\",\n \"widget\": \"colorSelector\",\n \"default\": \"rgb(255, 255, 255)\",\n \"spectrum\": {\n \"showInput\": true,\n \"showAlpha\": true,\n \"preferredFormat\": \"rgb\",\n \"showPalette\": true,\n \"palette\": [\n [\n \"rgba(0, 0, 0, 0)\"\n ],\n [\n \"rgb(67, 67, 67)\",\n \"rgb(102, 102, 102)\",\n \"rgb(204, 204, 204)\",\n \"rgb(217, 217, 217)\",\n \"rgb(255, 255, 255)\"\n ],\n [\n \"rgb(152, 0, 0)\",\n \"rgb(255, 0, 0)\",\n \"rgb(255, 153, 0)\",\n \"rgb(255, 255, 0)\",\n \"rgb(0, 255, 0)\",\n \"rgb(0, 255, 255)\",\n \"rgb(74, 134, 232)\",\n \"rgb(0, 0, 255)\",\n \"rgb(153, 0, 255)\",\n \"rgb(255, 0, 255)\"\n ],\n [\n \"rgb(230, 184, 175)\",\n \"rgb(244, 204, 204)\",\n \"rgb(252, 229, 205)\",\n \"rgb(255, 242, 204)\",\n \"rgb(217, 234, 211)\",\n \"rgb(208, 224, 227)\",\n \"rgb(201, 218, 248)\",\n \"rgb(207, 226, 243)\",\n \"rgb(217, 210, 233)\",\n \"rgb(234, 209, 220)\",\n \"rgb(221, 126, 107)\",\n \"rgb(234, 153, 153)\",\n \"rgb(249, 203, 156)\",\n \"rgb(255, 229, 153)\",\n \"rgb(182, 215, 168)\",\n \"rgb(162, 196, 201)\",\n \"rgb(164, 194, 244)\",\n \"rgb(159, 197, 232)\",\n \"rgb(180, 167, 214)\",\n \"rgb(213, 166, 189)\",\n \"rgb(204, 65, 37)\",\n \"rgb(224, 102, 102)\",\n \"rgb(246, 178, 107)\",\n \"rgb(255, 217, 102)\",\n \"rgb(147, 196, 125)\",\n \"rgb(118, 165, 175)\",\n \"rgb(109, 158, 235)\",\n \"rgb(111, 168, 220)\",\n \"rgb(142, 124, 195)\",\n \"rgb(194, 123, 160)\",\n \"rgb(166, 28, 0)\",\n \"rgb(204, 0, 0)\",\n \"rgb(230, 145, 56)\",\n \"rgb(241, 194, 50)\",\n \"rgb(106, 168, 79)\",\n \"rgb(69, 129, 142)\",\n \"rgb(60, 120, 216)\",\n \"rgb(61, 133, 198)\",\n \"rgb(103, 78, 167)\",\n \"rgb(166, 77, 121)\",\n \"rgb(91, 15, 0)\",\n \"rgb(102, 0, 0)\",\n \"rgb(120, 63, 4)\",\n \"rgb(127, 96, 0)\",\n \"rgb(39, 78, 19)\",\n \"rgb(12, 52, 61)\",\n \"rgb(28, 69, 135)\",\n \"rgb(7, 55, 99)\",\n \"rgb(32, 18, 77)\",\n \"rgb(76, 17, 48)\"\n ]\n ]\n }\n },\n {\n \"name\": \"boxShadow\",\n \"type\": \"boolean\",\n \"label\": \"Box shadow\",\n \"default\": true,\n \"description\": \"Adds a subtle shadow around the interaction. You might want to disable this for completely transparent interactions\"\n }\n ]\n },\n {\n \"name\": \"goto\",\n \"label\": \"Go to on click\",\n \"importance\": \"low\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"type\",\n \"label\": \"Type\",\n \"type\": \"select\",\n \"widget\": \"selectToggleFields\",\n \"options\": [\n {\n \"value\": \"timecode\",\n \"label\": \"Timecode\",\n \"hideFields\": [\n \"url\"\n ]\n },\n {\n \"value\": \"url\",\n \"label\": \"Another page (URL)\",\n \"hideFields\": [\n \"time\"\n ]\n }\n ],\n \"optional\": true\n },\n {\n \"name\": \"time\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Go To\",\n \"description\": \"The target time the user will be taken to upon pressing the hotspot. Enter timecode in the format M:SS.\",\n \"optional\": true\n },\n {\n \"name\": \"url\",\n \"type\": \"group\",\n \"label\": \"URL\",\n \"widget\": \"linkWidget\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"protocol\",\n \"type\": \"select\",\n \"label\": \"Protocol\",\n \"options\": [\n {\n \"value\": \"http:\/\/\",\n \"label\": \"http:\/\/\"\n },\n {\n \"value\": \"https:\/\/\",\n \"label\": \"https:\/\/\"\n },\n {\n \"value\": \"\/\",\n \"label\": \"(root relative)\"\n },\n {\n \"value\": \"other\",\n \"label\": \"other\"\n }\n ],\n \"optional\": true,\n \"default\": \"http:\/\/\"\n },\n {\n \"name\": \"url\",\n \"type\": \"text\",\n \"label\": \"URL\",\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"visualize\",\n \"type\": \"boolean\",\n \"label\": \"Visualize\",\n \"description\": \"Show that interaction can be clicked by adding a border and an icon\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"bookmarks\",\n \"importance\": \"low\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"bookmark\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"time\",\n \"type\": \"number\"\n },\n {\n \"name\": \"label\",\n \"type\": \"text\"\n }\n ]\n }\n },\n {\n \"name\": \"endscreens\",\n \"importance\": \"low\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"endscreen\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"time\",\n \"type\": \"number\"\n },\n {\n \"name\": \"label\",\n \"type\": \"text\"\n }\n ]\n }\n }\n ]\n },\n {\n \"name\": \"summary\",\n \"type\": \"group\",\n \"label\": \"Summary task\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"task\",\n \"type\": \"library\",\n \"options\": [\n \"H5P.Summary 1.10\"\n ],\n \"default\": {\n \"library\": \"H5P.Summary 1.10\",\n \"params\": {}\n }\n },\n {\n \"name\": \"displayAt\",\n \"type\": \"number\",\n \"label\": \"Display at\",\n \"description\": \"Number of seconds before the video ends.\",\n \"default\": 3\n }\n ]\n }\n ]\n },\n {\n \"name\": \"override\",\n \"type\": \"group\",\n \"label\": \"Behavioural settings\",\n \"importance\": \"low\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"startVideoAt\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Start video at\",\n \"importance\": \"low\",\n \"optional\": true,\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"autoplay\",\n \"type\": \"boolean\",\n \"label\": \"Auto-play video\",\n \"default\": false,\n \"optional\": true,\n \"description\": \"Start playing the video automatically\"\n },\n {\n \"name\": \"loop\",\n \"type\": \"boolean\",\n \"label\": \"Loop the video\",\n \"default\": false,\n \"optional\": true,\n \"description\": \"Check if video should run in a loop\"\n },\n {\n \"name\": \"showSolutionButton\",\n \"type\": \"select\",\n \"label\": \"Override \\\"Show Solution\\\" button\",\n \"importance\": \"low\",\n \"description\": \"This option determines if the \\\"Show Solution\\\" button will be shown for all questions, disabled for all or configured for each question individually.\",\n \"optional\": true,\n \"options\": [\n {\n \"value\": \"on\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"off\",\n \"label\": \"Disabled\"\n }\n ]\n },\n {\n \"name\": \"retryButton\",\n \"type\": \"select\",\n \"label\": \"Override \\\"Retry\\\" button\",\n \"importance\": \"low\",\n \"description\": \"This option determines if the \\\"Retry\\\" button will be shown for all questions, disabled for all or configured for each question individually.\",\n \"optional\": true,\n \"options\": [\n {\n \"value\": \"on\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"off\",\n \"label\": \"Disabled\"\n }\n ]\n },\n {\n \"name\": \"showBookmarksmenuOnLoad\",\n \"type\": \"boolean\",\n \"label\": \"Start with bookmarks menu open\",\n \"importance\": \"low\",\n \"default\": false,\n \"description\": \"This function is not available on iPad when using YouTube as video source.\"\n },\n {\n \"name\": \"showRewind10\",\n \"type\": \"boolean\",\n \"label\": \"Show button for rewinding 10 seconds\",\n \"importance\": \"low\",\n \"default\": false\n },\n {\n \"name\": \"preventSkipping\",\n \"type\": \"boolean\",\n \"default\": false,\n \"label\": \"Prevent skipping forward in a video\",\n \"importance\": \"low\",\n \"description\": \"Enabling this options will disable user video navigation through default controls.\"\n },\n {\n \"name\": \"deactivateSound\",\n \"type\": \"boolean\",\n \"default\": false,\n \"label\": \"Deactivate sound\",\n \"importance\": \"low\",\n \"description\": \"Enabling this option will deactivate the video's sound and prevent it from being switched on.\"\n }\n ]\n },\n {\n \"name\": \"l10n\",\n \"type\": \"group\",\n \"label\": \"Localize\",\n \"importance\": \"low\",\n \"common\": true,\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"interaction\",\n \"type\": \"text\",\n \"label\": \"Interaction title\",\n \"importance\": \"low\",\n \"default\": \"Interaction\",\n \"optional\": true\n },\n {\n \"name\": \"play\",\n \"type\": \"text\",\n \"label\": \"Play title\",\n \"importance\": \"low\",\n \"default\": \"Play\",\n \"optional\": true\n },\n {\n \"name\": \"pause\",\n \"type\": \"text\",\n \"label\": \"Pause title\",\n \"importance\": \"low\",\n \"default\": \"Pause\",\n \"optional\": true\n },\n {\n \"name\": \"mute\",\n \"type\": \"text\",\n \"label\": \"Mute title\",\n \"importance\": \"low\",\n \"default\": \"Mute\",\n \"optional\": true\n },\n {\n \"name\": \"unmute\",\n \"type\": \"text\",\n \"label\": \"Unmute title\",\n \"importance\": \"low\",\n \"default\": \"Unmute\",\n \"optional\": true\n },\n {\n \"name\": \"quality\",\n \"type\": \"text\",\n \"label\": \"Video quality title\",\n \"importance\": \"low\",\n \"default\": \"Video Quality\",\n \"optional\": true\n },\n {\n \"name\": \"captions\",\n \"type\": \"text\",\n \"label\": \"Video captions title\",\n \"importance\": \"low\",\n \"default\": \"Captions\",\n \"optional\": true\n },\n {\n \"name\": \"close\",\n \"type\": \"text\",\n \"label\": \"Close button text\",\n \"importance\": \"low\",\n \"default\": \"Close\",\n \"optional\": true\n },\n {\n \"name\": \"fullscreen\",\n \"type\": \"text\",\n \"label\": \"Fullscreen title\",\n \"importance\": \"low\",\n \"default\": \"Fullscreen\",\n \"optional\": true\n },\n {\n \"name\": \"exitFullscreen\",\n \"type\": \"text\",\n \"label\": \"Exit fullscreen title\",\n \"importance\": \"low\",\n \"default\": \"Exit Fullscreen\",\n \"optional\": true\n },\n {\n \"name\": \"summary\",\n \"type\": \"text\",\n \"label\": \"Summary title\",\n \"importance\": \"low\",\n \"default\": \"Open summary dialog\",\n \"optional\": true\n },\n {\n \"name\": \"bookmarks\",\n \"type\": \"text\",\n \"label\": \"Bookmarks title\",\n \"importance\": \"low\",\n \"default\": \"Bookmarks\",\n \"optional\": true\n },\n {\n \"name\": \"endscreen\",\n \"type\": \"text\",\n \"label\": \"Submit screen title\",\n \"importance\": \"low\",\n \"default\": \"Submit screen\",\n \"optional\": true\n },\n {\n \"name\": \"defaultAdaptivitySeekLabel\",\n \"type\": \"text\",\n \"label\": \"Default label for adaptivity seek button\",\n \"importance\": \"low\",\n \"default\": \"Continue\",\n \"optional\": true\n },\n {\n \"name\": \"continueWithVideo\",\n \"type\": \"text\",\n \"label\": \"Default label for continue video button\",\n \"importance\": \"low\",\n \"default\": \"Continue with video\",\n \"optional\": true\n },\n {\n \"name\": \"playbackRate\",\n \"type\": \"text\",\n \"label\": \"Set playback rate\",\n \"importance\": \"low\",\n \"default\": \"Playback Rate\",\n \"optional\": true\n },\n {\n \"name\": \"rewind10\",\n \"type\": \"text\",\n \"label\": \"Rewind 10 Seconds\",\n \"importance\": \"low\",\n \"default\": \"Rewind 10 Seconds\",\n \"optional\": true\n },\n {\n \"name\": \"navDisabled\",\n \"type\": \"text\",\n \"label\": \"Navigation is disabled text\",\n \"importance\": \"low\",\n \"default\": \"Navigation is disabled\",\n \"optional\": true\n },\n {\n \"name\": \"sndDisabled\",\n \"type\": \"text\",\n \"label\": \"Sound is disabled text\",\n \"importance\": \"low\",\n \"default\": \"Sound is disabled\",\n \"optional\": true\n },\n {\n \"name\": \"requiresCompletionWarning\",\n \"type\": \"text\",\n \"label\": \"Warning that the user must answer the question correctly before continuing\",\n \"importance\": \"low\",\n \"default\": \"You need to answer all the questions correctly before continuing.\",\n \"optional\": true\n },\n {\n \"name\": \"back\",\n \"type\": \"text\",\n \"label\": \"Back button\",\n \"importance\": \"low\",\n \"default\": \"Back\",\n \"optional\": true\n },\n {\n \"name\": \"hours\",\n \"type\": \"text\",\n \"label\": \"Passed time hours\",\n \"importance\": \"low\",\n \"default\": \"Hours\",\n \"optional\": true\n },\n {\n \"name\": \"minutes\",\n \"type\": \"text\",\n \"label\": \"Passed time minutes\",\n \"importance\": \"low\",\n \"default\": \"Minutes\",\n \"optional\": true\n },\n {\n \"name\": \"seconds\",\n \"type\": \"text\",\n \"label\": \"Passed time seconds\",\n \"importance\": \"low\",\n \"default\": \"Seconds\",\n \"optional\": true\n },\n {\n \"name\": \"currentTime\",\n \"type\": \"text\",\n \"label\": \"Label for current time\",\n \"importance\": \"low\",\n \"default\": \"Current time:\",\n \"optional\": true\n },\n {\n \"name\": \"totalTime\",\n \"type\": \"text\",\n \"label\": \"Label for total time\",\n \"importance\": \"low\",\n \"default\": \"Total time:\",\n \"optional\": true\n },\n {\n \"name\": \"singleInteractionAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Text explaining that a single interaction with a name has come into view\",\n \"importance\": \"low\",\n \"default\": \"Interaction appeared:\",\n \"optional\": true\n },\n {\n \"name\": \"multipleInteractionsAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Text for explaining that multiple interactions have come into view\",\n \"importance\": \"low\",\n \"default\": \"Multiple interactions appeared.\",\n \"optional\": true\n },\n {\n \"name\": \"videoPausedAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Video is paused announcement\",\n \"importance\": \"low\",\n \"default\": \"Video is paused\",\n \"optional\": true\n },\n {\n \"name\": \"content\",\n \"type\": \"text\",\n \"label\": \"Content label\",\n \"importance\": \"low\",\n \"default\": \"Content\",\n \"optional\": true\n },\n {\n \"name\": \"answered\",\n \"type\": \"text\",\n \"label\": \"Answered message (@answered will be replaced with the number of answered questions)\",\n \"importance\": \"low\",\n \"default\": \"@answered answered\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTitle\",\n \"type\": \"text\",\n \"label\": \"Submit screen title\",\n \"importance\": \"low\",\n \"default\": \"@answered Question(s) answered\",\n \"description\": \"@answered will be replaced by the number of answered questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformation\",\n \"type\": \"text\",\n \"label\": \"Submit screen information\",\n \"importance\": \"low\",\n \"default\": \"You have answered @answered questions, click below to submit your answers.\",\n \"description\": \"@answered will be replaced by the number of answered questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformationNoAnswers\",\n \"type\": \"text\",\n \"label\": \"Submit screen information for missing answers\",\n \"importance\": \"low\",\n \"default\": \"You have not answered any questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformationMustHaveAnswer\",\n \"type\": \"text\",\n \"label\": \"Submit screen information for answer needed\",\n \"importance\": \"low\",\n \"default\": \"You have to answer at least one question before you can submit your answers.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardSubmitButton\",\n \"type\": \"text\",\n \"label\": \"Submit screen submit button\",\n \"importance\": \"low\",\n \"default\": \"Submit Answers\",\n \"optional\": true\n },\n {\n \"name\": \"endcardSubmitMessage\",\n \"type\": \"text\",\n \"label\": \"Submit screen submit message\",\n \"importance\": \"low\",\n \"default\": \"Your answers have been submitted!\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTableRowAnswered\",\n \"type\": \"text\",\n \"label\": \"Submit screen table row title: Answered questions\",\n \"importance\": \"low\",\n \"default\": \"Answered questions\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTableRowScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen table row title: Score\",\n \"importance\": \"low\",\n \"default\": \"Score\",\n \"optional\": true\n },\n {\n \"name\": \"endcardAnsweredScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen answered score\",\n \"importance\": \"low\",\n \"default\": \"answered\",\n \"optional\": true\n },\n {\n \"name\": \"endCardTableRowSummaryWithScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen row summary including score (for readspeakers)\",\n \"importance\": \"low\",\n \"default\": \"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\n \"optional\": true\n },\n {\n \"name\": \"endCardTableRowSummaryWithoutScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen row summary for no score (for readspeakers)\",\n \"importance\": \"low\",\n \"default\": \"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\",\n \"optional\": true\n }\n ]\n }\n]",
+ "tutorial_url": "",
+ "has_icon": 1
+ },
+ "created_at": "2020-09-30T20:24:58.000000Z",
+ "updated_at": "2020-09-30T20:24:58.000000Z"
+ },
+ "created_at": "2020-09-30T20:24:58.000000Z",
+ "updated_at": "2020-09-30T20:24:58.000000Z"
+ }
+}
+```
+
+### HTTP Request
+`GET api/v1/activities/{activity}/share`
+
+#### URL Parameters
+
+Parameter | Status | Description
+--------- | ------- | ------- | -------
+ `activity` | required | The Id of a activity
+
+
+
+
+## api/v1/activities/update-order
+> Example request:
+
+```bash
+curl -X GET \
+ -G "http://localhost:8000/api/v1/activities/update-order" \
+ -H "Content-Type: application/json" \
+ -H "Accept: application/json"
+```
+
+```javascript
+const url = new URL(
+ "http://localhost:8000/api/v1/activities/update-order"
+);
+
+let headers = {
+ "Content-Type": "application/json",
+ "Accept": "application/json",
+};
+
+fetch(url, {
+ method: "GET",
+ headers: headers,
+})
+ .then(response => response.json())
+ .then(json => console.log(json));
+```
+
+```php
+
+$client = new \GuzzleHttp\Client();
+$response = $client->get(
+ 'http://localhost:8000/api/v1/activities/update-order',
+ [
+ 'headers' => [
+ 'Content-Type' => 'application/json',
+ 'Accept' => 'application/json',
+ ],
+ ]
+);
+$body = $response->getBody();
+print_r(json_decode((string) $body));
+```
+
+```python
+import requests
+import json
+
+url = 'http://localhost:8000/api/v1/activities/update-order'
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'
+}
+response = requests.request('GET', url, headers=headers)
+response.json()
+```
+
+
+> Example response (401):
+
+```json
+{
+ "message": "Unauthenticated."
+}
+```
+
+### HTTP Request
+`GET api/v1/activities/update-order`
+
+
+
+
+
+## Remove Share Activity
+
+Remove share the specified activity.
+
+> Example request:
+
+```bash
+curl -X GET \
+ -G "http://localhost:8000/api/v1/activities/1/remove-share" \
+ -H "Content-Type: application/json" \
+ -H "Accept: application/json"
+```
+
+```javascript
+const url = new URL(
+ "http://localhost:8000/api/v1/activities/1/remove-share"
+);
+
+let headers = {
+ "Content-Type": "application/json",
+ "Accept": "application/json",
+};
+
+fetch(url, {
+ method: "GET",
+ headers: headers,
+})
+ .then(response => response.json())
+ .then(json => console.log(json));
+```
+
+```php
+
+$client = new \GuzzleHttp\Client();
+$response = $client->get(
+ 'http://localhost:8000/api/v1/activities/1/remove-share',
+ [
+ 'headers' => [
+ 'Content-Type' => 'application/json',
+ 'Accept' => 'application/json',
+ ],
+ ]
+);
+$body = $response->getBody();
+print_r(json_decode((string) $body));
+```
+
+```python
+import requests
+import json
+
+url = 'http://localhost:8000/api/v1/activities/1/remove-share'
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'
+}
+response = requests.request('GET', url, headers=headers)
+response.json()
+```
+
+
+> Example response (500):
+
+```json
+{
+ "errors": [
+ "Failed to remove share activity."
+ ]
+}
+```
+> Example response (200):
+
+```json
+{
+ "activity": {
+ "id": 1,
+ "playlist_id": 1,
+ "title": "Science of Golf: Why Balls Have Dimples",
+ "type": "h5p",
+ "content": "",
+ "shared": false,
+ "order": 2,
+ "thumb_url": null,
+ "subjects": [
+ {
+ "id": 4,
+ "name": "English",
+ "order": 3,
+ "created_at": "2022-01-06T11:59:52.000000Z",
+ "updated_at": "2022-01-06T12:15:10.000000Z"
+ },
+ {
+ "id": 1,
+ "name": "Math",
+ "order": 1,
+ "created_at": "2022-01-06T11:41:46.000000Z",
+ "updated_at": "2022-01-06T11:41:46.000000Z"
+ }
+ ],
+ "education_levels": [
+ {
+ "id": 1,
+ "name": "Grade A",
+ "order": 5,
+ "created_at": "2022-01-07T13:51:38.000000Z",
+ "updated_at": "2022-01-07T14:07:17.000000Z"
+ },
+ {
+ "id": 1,
+ "name": "Grade B",
+ "order": 6,
+ "created_at": "2022-01-07T13:51:38.000000Z",
+ "updated_at": "2022-01-07T14:07:17.000000Z"
+ }
+ ],
+ "author_tags": [
+ {
+ "id": 1,
+ "name": "Audio",
+ "order": 1,
+ "created_at": "2022-01-10T13:09:36.000000Z",
+ "updated_at": "2022-01-10T13:09:36.000000Z"
+ },
+ {
+ "id": 2,
+ "name": "Video",
+ "order": 2,
+ "created_at": "2022-01-10T13:09:44.000000Z",
+ "updated_at": "2022-01-10T13:20:57.000000Z"
+ }
+ ],
+ "gcr_activity_visibility": true,
+ "h5p_content": {
+ "id": 59,
+ "user_id": 1,
+ "title": "Science of Golf: Why Balls Have Dimples",
+ "library_id": 40,
+ "parameters": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"},\"aspectRatio\":\"16:9\"}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\" Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\" They reduce wind resistance.<\/p>\\n\",\" They make the ball more visually interesting.<\/p>\\n\",\" They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\" A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\" A low pressure zone, which is what causes drag.<\/p>\\n\",\" The ball has no spin.<\/p>\\n\",\" The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Smooth Ball<\/p>\\n\"}],\"bookmarks\":[],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}",
+ "filtered": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"}}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\" Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\" They reduce wind resistance.<\/p>\\n\",\" They make the ball more visually interesting.<\/p>\\n\",\" They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\" A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\" A low pressure zone, which is what causes drag.<\/p>\\n\",\" The ball has no spin.<\/p>\\n\",\" The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Smooth Ball<\/p>\\n\"}],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}",
+ "slug": "science-of-golf-why-balls-have-dimples",
+ "embed_type": "div",
+ "disable": 9,
+ "content_type": null,
+ "authors": null,
+ "source": null,
+ "year_from": null,
+ "year_to": null,
+ "license": "U",
+ "license_version": null,
+ "license_extras": null,
+ "author_comments": null,
+ "changes": null,
+ "default_language": null,
+ "library": {
+ "id": 40,
+ "created_at": null,
+ "updated_at": null,
+ "name": "H5P.InteractiveVideo",
+ "title": "Interactive Video",
+ "major_version": 1,
+ "minor_version": 21,
+ "patch_version": 9,
+ "runnable": 1,
+ "restricted": 0,
+ "fullscreen": 1,
+ "embed_types": "iframe",
+ "preloaded_js": "dist\/h5p-interactive-video.js",
+ "preloaded_css": "dist\/h5p-interactive-video.css",
+ "drop_library_css": "",
+ "semantics": "[\n {\n \"name\": \"interactiveVideo\",\n \"type\": \"group\",\n \"widget\": \"wizard\",\n \"label\": \"Interactive Video Editor\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"video\",\n \"type\": \"group\",\n \"label\": \"Upload\/embed video\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"files\",\n \"type\": \"video\",\n \"label\": \"Add a video\",\n \"importance\": \"high\",\n \"description\": \"Click below to add a video you wish to use in your interactive video. You can add a video link or upload video files. It is possible to add several versions of the video with different qualities. To ensure maximum support in browsers at least add a version in webm and mp4 formats.\",\n \"extraAttributes\": [\n \"metadata\"\n ],\n \"enableCustomQualityLabel\": true\n },\n {\n \"name\": \"startScreenOptions\",\n \"type\": \"group\",\n \"label\": \"Start screen options (unsupported for YouTube videos)\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"title\",\n \"type\": \"text\",\n \"label\": \"The title of this interactive video\",\n \"importance\": \"low\",\n \"maxLength\": 60,\n \"default\": \"Interactive Video\",\n \"description\": \"Used in summaries, statistics etc.\"\n },\n {\n \"name\": \"hideStartTitle\",\n \"type\": \"boolean\",\n \"label\": \"Hide title on video start screen\",\n \"importance\": \"low\",\n \"optional\": true,\n \"default\": false\n },\n {\n \"name\": \"shortStartDescription\",\n \"type\": \"text\",\n \"label\": \"Short description (Optional)\",\n \"importance\": \"low\",\n \"optional\": true,\n \"maxLength\": 120,\n \"description\": \"Optional. Display a short description text on the video start screen. Does not work for YouTube videos.\"\n },\n {\n \"name\": \"poster\",\n \"type\": \"image\",\n \"label\": \"Poster image\",\n \"importance\": \"low\",\n \"optional\": true,\n \"description\": \"Image displayed before the user launches the video. Does not work for YouTube Videos.\"\n }\n ]\n },\n {\n \"name\": \"textTracks\",\n \"type\": \"group\",\n \"label\": \"Text tracks (unsupported for YouTube videos)\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"videoTrack\",\n \"type\": \"list\",\n \"label\": \"Available text tracks\",\n \"importance\": \"low\",\n \"optional\": true,\n \"entity\": \"Track\",\n \"min\": 0,\n \"defaultNum\": 1,\n \"field\": {\n \"name\": \"track\",\n \"type\": \"group\",\n \"label\": \"Track\",\n \"importance\": \"low\",\n \"expanded\": false,\n \"fields\": [\n {\n \"name\": \"label\",\n \"type\": \"text\",\n \"label\": \"Track label\",\n \"description\": \"Used if you offer multiple tracks and the user has to choose a track. For instance 'Spanish subtitles' could be the label of a Spanish subtitle track.\",\n \"importance\": \"low\",\n \"default\": \"Subtitles\",\n \"optional\": true\n },\n {\n \"name\": \"kind\",\n \"type\": \"select\",\n \"label\": \"Type of text track\",\n \"importance\": \"low\",\n \"default\": \"subtitles\",\n \"options\": [\n {\n \"value\": \"subtitles\",\n \"label\": \"Subtitles\"\n },\n {\n \"value\": \"captions\",\n \"label\": \"Captions\"\n },\n {\n \"value\": \"descriptions\",\n \"label\": \"Descriptions\"\n }\n ]\n },\n {\n \"name\": \"srcLang\",\n \"type\": \"text\",\n \"label\": \"Source language, must be defined for subtitles\",\n \"importance\": \"low\",\n \"default\": \"en\",\n \"description\": \"Must be a valid BCP 47 language tag. If 'Subtitles' is the type of text track selected, the source language of the track must be defined.\"\n },\n {\n \"name\": \"track\",\n \"type\": \"file\",\n \"label\": \"Track source (WebVTT file)\",\n \"importance\": \"low\"\n }\n ]\n }\n },\n {\n \"name\": \"defaultTrackLabel\",\n \"type\": \"text\",\n \"label\": \"Default text track\",\n \"description\": \"If left empty or not matching any of the text tracks the first text track will be used as the default.\",\n \"importance\": \"low\",\n \"optional\": true\n }\n ]\n }\n ]\n },\n {\n \"name\": \"assets\",\n \"type\": \"group\",\n \"label\": \"Add interactions\",\n \"importance\": \"high\",\n \"widget\": \"interactiveVideo\",\n \"video\": \"video\/files\",\n \"poster\": \"video\/startScreenOptions\/poster\",\n \"fields\": [\n {\n \"name\": \"interactions\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"interaction\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"duration\",\n \"type\": \"group\",\n \"widget\": \"duration\",\n \"label\": \"Display time\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"from\",\n \"type\": \"number\"\n },\n {\n \"name\": \"to\",\n \"type\": \"number\"\n }\n ]\n },\n {\n \"name\": \"pause\",\n \"label\": \"Pause video\",\n \"importance\": \"low\",\n \"type\": \"boolean\"\n },\n {\n \"name\": \"displayType\",\n \"label\": \"Display as\",\n \"importance\": \"low\",\n \"description\": \"Button<\/b> is a collapsed interaction the user must press to open. Poster<\/b> is an expanded interaction displayed directly on top of the video\",\n \"type\": \"select\",\n \"widget\": \"imageRadioButtonGroup\",\n \"options\": [\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"poster\",\n \"label\": \"Poster\"\n }\n ],\n \"default\": \"button\"\n },\n {\n \"name\": \"buttonOnMobile\",\n \"label\": \"Turn into button on small screens\",\n \"importance\": \"low\",\n \"type\": \"boolean\",\n \"default\": false\n },\n {\n \"name\": \"label\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"label\": \"Label\",\n \"importance\": \"low\",\n \"description\": \"Label displayed next to interaction icon.\",\n \"optional\": true,\n \"enterMode\": \"p\",\n \"tags\": [\n \"p\"\n ]\n },\n {\n \"name\": \"x\",\n \"type\": \"number\",\n \"importance\": \"low\",\n \"widget\": \"none\"\n },\n {\n \"name\": \"y\",\n \"type\": \"number\",\n \"importance\": \"low\",\n \"widget\": \"none\"\n },\n {\n \"name\": \"width\",\n \"type\": \"number\",\n \"widget\": \"none\",\n \"importance\": \"low\",\n \"optional\": true\n },\n {\n \"name\": \"height\",\n \"type\": \"number\",\n \"widget\": \"none\",\n \"importance\": \"low\",\n \"optional\": true\n },\n {\n \"name\": \"libraryTitle\",\n \"type\": \"text\",\n \"importance\": \"low\",\n \"optional\": true,\n \"widget\": \"none\"\n },\n {\n \"name\": \"action\",\n \"type\": \"library\",\n \"importance\": \"low\",\n \"options\": [\n \"H5P.Nil 1.0\",\n \"H5P.Text 1.1\",\n \"H5P.Table 1.1\",\n \"H5P.Link 1.3\",\n \"H5P.Image 1.1\",\n \"H5P.Summary 1.10\",\n \"H5P.SingleChoiceSet 1.11\",\n \"H5P.MultiChoice 1.14\",\n \"H5P.TrueFalse 1.6\",\n \"H5P.Blanks 1.12\",\n \"H5P.DragQuestion 1.13\",\n \"H5P.MarkTheWords 1.9\",\n \"H5P.DragText 1.8\",\n \"H5P.GoToQuestion 1.3\",\n \"H5P.IVHotspot 1.2\",\n \"H5P.Questionnaire 1.2\",\n \"H5P.FreeTextQuestion 1.0\"\n ]\n },\n {\n \"name\": \"adaptivity\",\n \"type\": \"group\",\n \"label\": \"Adaptivity\",\n \"importance\": \"low\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"correct\",\n \"type\": \"group\",\n \"label\": \"Action on all correct\",\n \"fields\": [\n {\n \"name\": \"seekTo\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Seek to\",\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"allowOptOut\",\n \"type\": \"boolean\",\n \"label\": \"Allow the user to opt out and continue\"\n },\n {\n \"name\": \"message\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"enterMode\": \"p\",\n \"tags\": [\n \"strong\",\n \"em\",\n \"del\",\n \"a\",\n \"code\"\n ],\n \"label\": \"Message\"\n },\n {\n \"name\": \"seekLabel\",\n \"type\": \"text\",\n \"label\": \"Label for seek button\"\n }\n ]\n },\n {\n \"name\": \"wrong\",\n \"type\": \"group\",\n \"label\": \"Action on wrong\",\n \"fields\": [\n {\n \"name\": \"seekTo\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Seek to\",\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"allowOptOut\",\n \"type\": \"boolean\",\n \"label\": \"Allow the user to opt out and continue\"\n },\n {\n \"name\": \"message\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"enterMode\": \"p\",\n \"tags\": [\n \"strong\",\n \"em\",\n \"del\",\n \"a\",\n \"code\"\n ],\n \"label\": \"Message\"\n },\n {\n \"name\": \"seekLabel\",\n \"type\": \"text\",\n \"label\": \"Label for seek button\"\n }\n ]\n },\n {\n \"name\": \"requireCompletion\",\n \"type\": \"boolean\",\n \"label\": \"Require full score for task before proceeding\",\n \"description\": \"For best functionality this option should be used in conjunction with the \\\"Prevent skipping forward in a video\\\" option of Interactive Video.\"\n }\n ]\n },\n {\n \"name\": \"visuals\",\n \"label\": \"Visuals\",\n \"importance\": \"low\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"backgroundColor\",\n \"type\": \"text\",\n \"label\": \"Background color\",\n \"widget\": \"colorSelector\",\n \"default\": \"rgb(255, 255, 255)\",\n \"spectrum\": {\n \"showInput\": true,\n \"showAlpha\": true,\n \"preferredFormat\": \"rgb\",\n \"showPalette\": true,\n \"palette\": [\n [\n \"rgba(0, 0, 0, 0)\"\n ],\n [\n \"rgb(67, 67, 67)\",\n \"rgb(102, 102, 102)\",\n \"rgb(204, 204, 204)\",\n \"rgb(217, 217, 217)\",\n \"rgb(255, 255, 255)\"\n ],\n [\n \"rgb(152, 0, 0)\",\n \"rgb(255, 0, 0)\",\n \"rgb(255, 153, 0)\",\n \"rgb(255, 255, 0)\",\n \"rgb(0, 255, 0)\",\n \"rgb(0, 255, 255)\",\n \"rgb(74, 134, 232)\",\n \"rgb(0, 0, 255)\",\n \"rgb(153, 0, 255)\",\n \"rgb(255, 0, 255)\"\n ],\n [\n \"rgb(230, 184, 175)\",\n \"rgb(244, 204, 204)\",\n \"rgb(252, 229, 205)\",\n \"rgb(255, 242, 204)\",\n \"rgb(217, 234, 211)\",\n \"rgb(208, 224, 227)\",\n \"rgb(201, 218, 248)\",\n \"rgb(207, 226, 243)\",\n \"rgb(217, 210, 233)\",\n \"rgb(234, 209, 220)\",\n \"rgb(221, 126, 107)\",\n \"rgb(234, 153, 153)\",\n \"rgb(249, 203, 156)\",\n \"rgb(255, 229, 153)\",\n \"rgb(182, 215, 168)\",\n \"rgb(162, 196, 201)\",\n \"rgb(164, 194, 244)\",\n \"rgb(159, 197, 232)\",\n \"rgb(180, 167, 214)\",\n \"rgb(213, 166, 189)\",\n \"rgb(204, 65, 37)\",\n \"rgb(224, 102, 102)\",\n \"rgb(246, 178, 107)\",\n \"rgb(255, 217, 102)\",\n \"rgb(147, 196, 125)\",\n \"rgb(118, 165, 175)\",\n \"rgb(109, 158, 235)\",\n \"rgb(111, 168, 220)\",\n \"rgb(142, 124, 195)\",\n \"rgb(194, 123, 160)\",\n \"rgb(166, 28, 0)\",\n \"rgb(204, 0, 0)\",\n \"rgb(230, 145, 56)\",\n \"rgb(241, 194, 50)\",\n \"rgb(106, 168, 79)\",\n \"rgb(69, 129, 142)\",\n \"rgb(60, 120, 216)\",\n \"rgb(61, 133, 198)\",\n \"rgb(103, 78, 167)\",\n \"rgb(166, 77, 121)\",\n \"rgb(91, 15, 0)\",\n \"rgb(102, 0, 0)\",\n \"rgb(120, 63, 4)\",\n \"rgb(127, 96, 0)\",\n \"rgb(39, 78, 19)\",\n \"rgb(12, 52, 61)\",\n \"rgb(28, 69, 135)\",\n \"rgb(7, 55, 99)\",\n \"rgb(32, 18, 77)\",\n \"rgb(76, 17, 48)\"\n ]\n ]\n }\n },\n {\n \"name\": \"boxShadow\",\n \"type\": \"boolean\",\n \"label\": \"Box shadow\",\n \"default\": true,\n \"description\": \"Adds a subtle shadow around the interaction. You might want to disable this for completely transparent interactions\"\n }\n ]\n },\n {\n \"name\": \"goto\",\n \"label\": \"Go to on click\",\n \"importance\": \"low\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"type\",\n \"label\": \"Type\",\n \"type\": \"select\",\n \"widget\": \"selectToggleFields\",\n \"options\": [\n {\n \"value\": \"timecode\",\n \"label\": \"Timecode\",\n \"hideFields\": [\n \"url\"\n ]\n },\n {\n \"value\": \"url\",\n \"label\": \"Another page (URL)\",\n \"hideFields\": [\n \"time\"\n ]\n }\n ],\n \"optional\": true\n },\n {\n \"name\": \"time\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Go To\",\n \"description\": \"The target time the user will be taken to upon pressing the hotspot. Enter timecode in the format M:SS.\",\n \"optional\": true\n },\n {\n \"name\": \"url\",\n \"type\": \"group\",\n \"label\": \"URL\",\n \"widget\": \"linkWidget\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"protocol\",\n \"type\": \"select\",\n \"label\": \"Protocol\",\n \"options\": [\n {\n \"value\": \"http:\/\/\",\n \"label\": \"http:\/\/\"\n },\n {\n \"value\": \"https:\/\/\",\n \"label\": \"https:\/\/\"\n },\n {\n \"value\": \"\/\",\n \"label\": \"(root relative)\"\n },\n {\n \"value\": \"other\",\n \"label\": \"other\"\n }\n ],\n \"optional\": true,\n \"default\": \"http:\/\/\"\n },\n {\n \"name\": \"url\",\n \"type\": \"text\",\n \"label\": \"URL\",\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"visualize\",\n \"type\": \"boolean\",\n \"label\": \"Visualize\",\n \"description\": \"Show that interaction can be clicked by adding a border and an icon\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"bookmarks\",\n \"importance\": \"low\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"bookmark\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"time\",\n \"type\": \"number\"\n },\n {\n \"name\": \"label\",\n \"type\": \"text\"\n }\n ]\n }\n },\n {\n \"name\": \"endscreens\",\n \"importance\": \"low\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"endscreen\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"time\",\n \"type\": \"number\"\n },\n {\n \"name\": \"label\",\n \"type\": \"text\"\n }\n ]\n }\n }\n ]\n },\n {\n \"name\": \"summary\",\n \"type\": \"group\",\n \"label\": \"Summary task\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"task\",\n \"type\": \"library\",\n \"options\": [\n \"H5P.Summary 1.10\"\n ],\n \"default\": {\n \"library\": \"H5P.Summary 1.10\",\n \"params\": {}\n }\n },\n {\n \"name\": \"displayAt\",\n \"type\": \"number\",\n \"label\": \"Display at\",\n \"description\": \"Number of seconds before the video ends.\",\n \"default\": 3\n }\n ]\n }\n ]\n },\n {\n \"name\": \"override\",\n \"type\": \"group\",\n \"label\": \"Behavioural settings\",\n \"importance\": \"low\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"startVideoAt\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Start video at\",\n \"importance\": \"low\",\n \"optional\": true,\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"autoplay\",\n \"type\": \"boolean\",\n \"label\": \"Auto-play video\",\n \"default\": false,\n \"optional\": true,\n \"description\": \"Start playing the video automatically\"\n },\n {\n \"name\": \"loop\",\n \"type\": \"boolean\",\n \"label\": \"Loop the video\",\n \"default\": false,\n \"optional\": true,\n \"description\": \"Check if video should run in a loop\"\n },\n {\n \"name\": \"showSolutionButton\",\n \"type\": \"select\",\n \"label\": \"Override \\\"Show Solution\\\" button\",\n \"importance\": \"low\",\n \"description\": \"This option determines if the \\\"Show Solution\\\" button will be shown for all questions, disabled for all or configured for each question individually.\",\n \"optional\": true,\n \"options\": [\n {\n \"value\": \"on\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"off\",\n \"label\": \"Disabled\"\n }\n ]\n },\n {\n \"name\": \"retryButton\",\n \"type\": \"select\",\n \"label\": \"Override \\\"Retry\\\" button\",\n \"importance\": \"low\",\n \"description\": \"This option determines if the \\\"Retry\\\" button will be shown for all questions, disabled for all or configured for each question individually.\",\n \"optional\": true,\n \"options\": [\n {\n \"value\": \"on\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"off\",\n \"label\": \"Disabled\"\n }\n ]\n },\n {\n \"name\": \"showBookmarksmenuOnLoad\",\n \"type\": \"boolean\",\n \"label\": \"Start with bookmarks menu open\",\n \"importance\": \"low\",\n \"default\": false,\n \"description\": \"This function is not available on iPad when using YouTube as video source.\"\n },\n {\n \"name\": \"showRewind10\",\n \"type\": \"boolean\",\n \"label\": \"Show button for rewinding 10 seconds\",\n \"importance\": \"low\",\n \"default\": false\n },\n {\n \"name\": \"preventSkipping\",\n \"type\": \"boolean\",\n \"default\": false,\n \"label\": \"Prevent skipping forward in a video\",\n \"importance\": \"low\",\n \"description\": \"Enabling this options will disable user video navigation through default controls.\"\n },\n {\n \"name\": \"deactivateSound\",\n \"type\": \"boolean\",\n \"default\": false,\n \"label\": \"Deactivate sound\",\n \"importance\": \"low\",\n \"description\": \"Enabling this option will deactivate the video's sound and prevent it from being switched on.\"\n }\n ]\n },\n {\n \"name\": \"l10n\",\n \"type\": \"group\",\n \"label\": \"Localize\",\n \"importance\": \"low\",\n \"common\": true,\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"interaction\",\n \"type\": \"text\",\n \"label\": \"Interaction title\",\n \"importance\": \"low\",\n \"default\": \"Interaction\",\n \"optional\": true\n },\n {\n \"name\": \"play\",\n \"type\": \"text\",\n \"label\": \"Play title\",\n \"importance\": \"low\",\n \"default\": \"Play\",\n \"optional\": true\n },\n {\n \"name\": \"pause\",\n \"type\": \"text\",\n \"label\": \"Pause title\",\n \"importance\": \"low\",\n \"default\": \"Pause\",\n \"optional\": true\n },\n {\n \"name\": \"mute\",\n \"type\": \"text\",\n \"label\": \"Mute title\",\n \"importance\": \"low\",\n \"default\": \"Mute\",\n \"optional\": true\n },\n {\n \"name\": \"unmute\",\n \"type\": \"text\",\n \"label\": \"Unmute title\",\n \"importance\": \"low\",\n \"default\": \"Unmute\",\n \"optional\": true\n },\n {\n \"name\": \"quality\",\n \"type\": \"text\",\n \"label\": \"Video quality title\",\n \"importance\": \"low\",\n \"default\": \"Video Quality\",\n \"optional\": true\n },\n {\n \"name\": \"captions\",\n \"type\": \"text\",\n \"label\": \"Video captions title\",\n \"importance\": \"low\",\n \"default\": \"Captions\",\n \"optional\": true\n },\n {\n \"name\": \"close\",\n \"type\": \"text\",\n \"label\": \"Close button text\",\n \"importance\": \"low\",\n \"default\": \"Close\",\n \"optional\": true\n },\n {\n \"name\": \"fullscreen\",\n \"type\": \"text\",\n \"label\": \"Fullscreen title\",\n \"importance\": \"low\",\n \"default\": \"Fullscreen\",\n \"optional\": true\n },\n {\n \"name\": \"exitFullscreen\",\n \"type\": \"text\",\n \"label\": \"Exit fullscreen title\",\n \"importance\": \"low\",\n \"default\": \"Exit Fullscreen\",\n \"optional\": true\n },\n {\n \"name\": \"summary\",\n \"type\": \"text\",\n \"label\": \"Summary title\",\n \"importance\": \"low\",\n \"default\": \"Open summary dialog\",\n \"optional\": true\n },\n {\n \"name\": \"bookmarks\",\n \"type\": \"text\",\n \"label\": \"Bookmarks title\",\n \"importance\": \"low\",\n \"default\": \"Bookmarks\",\n \"optional\": true\n },\n {\n \"name\": \"endscreen\",\n \"type\": \"text\",\n \"label\": \"Submit screen title\",\n \"importance\": \"low\",\n \"default\": \"Submit screen\",\n \"optional\": true\n },\n {\n \"name\": \"defaultAdaptivitySeekLabel\",\n \"type\": \"text\",\n \"label\": \"Default label for adaptivity seek button\",\n \"importance\": \"low\",\n \"default\": \"Continue\",\n \"optional\": true\n },\n {\n \"name\": \"continueWithVideo\",\n \"type\": \"text\",\n \"label\": \"Default label for continue video button\",\n \"importance\": \"low\",\n \"default\": \"Continue with video\",\n \"optional\": true\n },\n {\n \"name\": \"playbackRate\",\n \"type\": \"text\",\n \"label\": \"Set playback rate\",\n \"importance\": \"low\",\n \"default\": \"Playback Rate\",\n \"optional\": true\n },\n {\n \"name\": \"rewind10\",\n \"type\": \"text\",\n \"label\": \"Rewind 10 Seconds\",\n \"importance\": \"low\",\n \"default\": \"Rewind 10 Seconds\",\n \"optional\": true\n },\n {\n \"name\": \"navDisabled\",\n \"type\": \"text\",\n \"label\": \"Navigation is disabled text\",\n \"importance\": \"low\",\n \"default\": \"Navigation is disabled\",\n \"optional\": true\n },\n {\n \"name\": \"sndDisabled\",\n \"type\": \"text\",\n \"label\": \"Sound is disabled text\",\n \"importance\": \"low\",\n \"default\": \"Sound is disabled\",\n \"optional\": true\n },\n {\n \"name\": \"requiresCompletionWarning\",\n \"type\": \"text\",\n \"label\": \"Warning that the user must answer the question correctly before continuing\",\n \"importance\": \"low\",\n \"default\": \"You need to answer all the questions correctly before continuing.\",\n \"optional\": true\n },\n {\n \"name\": \"back\",\n \"type\": \"text\",\n \"label\": \"Back button\",\n \"importance\": \"low\",\n \"default\": \"Back\",\n \"optional\": true\n },\n {\n \"name\": \"hours\",\n \"type\": \"text\",\n \"label\": \"Passed time hours\",\n \"importance\": \"low\",\n \"default\": \"Hours\",\n \"optional\": true\n },\n {\n \"name\": \"minutes\",\n \"type\": \"text\",\n \"label\": \"Passed time minutes\",\n \"importance\": \"low\",\n \"default\": \"Minutes\",\n \"optional\": true\n },\n {\n \"name\": \"seconds\",\n \"type\": \"text\",\n \"label\": \"Passed time seconds\",\n \"importance\": \"low\",\n \"default\": \"Seconds\",\n \"optional\": true\n },\n {\n \"name\": \"currentTime\",\n \"type\": \"text\",\n \"label\": \"Label for current time\",\n \"importance\": \"low\",\n \"default\": \"Current time:\",\n \"optional\": true\n },\n {\n \"name\": \"totalTime\",\n \"type\": \"text\",\n \"label\": \"Label for total time\",\n \"importance\": \"low\",\n \"default\": \"Total time:\",\n \"optional\": true\n },\n {\n \"name\": \"singleInteractionAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Text explaining that a single interaction with a name has come into view\",\n \"importance\": \"low\",\n \"default\": \"Interaction appeared:\",\n \"optional\": true\n },\n {\n \"name\": \"multipleInteractionsAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Text for explaining that multiple interactions have come into view\",\n \"importance\": \"low\",\n \"default\": \"Multiple interactions appeared.\",\n \"optional\": true\n },\n {\n \"name\": \"videoPausedAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Video is paused announcement\",\n \"importance\": \"low\",\n \"default\": \"Video is paused\",\n \"optional\": true\n },\n {\n \"name\": \"content\",\n \"type\": \"text\",\n \"label\": \"Content label\",\n \"importance\": \"low\",\n \"default\": \"Content\",\n \"optional\": true\n },\n {\n \"name\": \"answered\",\n \"type\": \"text\",\n \"label\": \"Answered message (@answered will be replaced with the number of answered questions)\",\n \"importance\": \"low\",\n \"default\": \"@answered answered\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTitle\",\n \"type\": \"text\",\n \"label\": \"Submit screen title\",\n \"importance\": \"low\",\n \"default\": \"@answered Question(s) answered\",\n \"description\": \"@answered will be replaced by the number of answered questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformation\",\n \"type\": \"text\",\n \"label\": \"Submit screen information\",\n \"importance\": \"low\",\n \"default\": \"You have answered @answered questions, click below to submit your answers.\",\n \"description\": \"@answered will be replaced by the number of answered questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformationNoAnswers\",\n \"type\": \"text\",\n \"label\": \"Submit screen information for missing answers\",\n \"importance\": \"low\",\n \"default\": \"You have not answered any questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformationMustHaveAnswer\",\n \"type\": \"text\",\n \"label\": \"Submit screen information for answer needed\",\n \"importance\": \"low\",\n \"default\": \"You have to answer at least one question before you can submit your answers.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardSubmitButton\",\n \"type\": \"text\",\n \"label\": \"Submit screen submit button\",\n \"importance\": \"low\",\n \"default\": \"Submit Answers\",\n \"optional\": true\n },\n {\n \"name\": \"endcardSubmitMessage\",\n \"type\": \"text\",\n \"label\": \"Submit screen submit message\",\n \"importance\": \"low\",\n \"default\": \"Your answers have been submitted!\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTableRowAnswered\",\n \"type\": \"text\",\n \"label\": \"Submit screen table row title: Answered questions\",\n \"importance\": \"low\",\n \"default\": \"Answered questions\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTableRowScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen table row title: Score\",\n \"importance\": \"low\",\n \"default\": \"Score\",\n \"optional\": true\n },\n {\n \"name\": \"endcardAnsweredScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen answered score\",\n \"importance\": \"low\",\n \"default\": \"answered\",\n \"optional\": true\n },\n {\n \"name\": \"endCardTableRowSummaryWithScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen row summary including score (for readspeakers)\",\n \"importance\": \"low\",\n \"default\": \"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\n \"optional\": true\n },\n {\n \"name\": \"endCardTableRowSummaryWithoutScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen row summary for no score (for readspeakers)\",\n \"importance\": \"low\",\n \"default\": \"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\",\n \"optional\": true\n }\n ]\n }\n]",
+ "tutorial_url": "",
+ "has_icon": 1
+ },
+ "created_at": "2020-09-30T20:24:58.000000Z",
+ "updated_at": "2020-09-30T20:24:58.000000Z"
+ },
+ "created_at": "2020-09-30T20:24:58.000000Z",
+ "updated_at": "2020-09-30T20:24:58.000000Z"
+ }
+}
+```
+
+### HTTP Request
+`GET api/v1/activities/{activity}/remove-share`
+
+#### URL Parameters
+
+Parameter | Status | Description
+--------- | ------- | ------- | -------
+ `activity` | required | The Id of a activity
+
+
+
+
+## Get Activity Detail
+
+Get the specified activity in detail.
+
+> Example request:
+
+```bash
+curl -X GET \
+ -G "http://localhost:8000/api/v1/activities/1/detail" \
+ -H "Content-Type: application/json" \
+ -H "Accept: application/json"
+```
+
+```javascript
+const url = new URL(
+ "http://localhost:8000/api/v1/activities/1/detail"
+);
+
+let headers = {
+ "Content-Type": "application/json",
+ "Accept": "application/json",
+};
+
+fetch(url, {
+ method: "GET",
+ headers: headers,
+})
+ .then(response => response.json())
+ .then(json => console.log(json));
+```
+
+```php
+
+$client = new \GuzzleHttp\Client();
+$response = $client->get(
+ 'http://localhost:8000/api/v1/activities/1/detail',
+ [
+ 'headers' => [
+ 'Content-Type' => 'application/json',
+ 'Accept' => 'application/json',
+ ],
+ ]
+);
+$body = $response->getBody();
+print_r(json_decode((string) $body));
+```
+
+```python
+import requests
+import json
+
+url = 'http://localhost:8000/api/v1/activities/1/detail'
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'
+}
+response = requests.request('GET', url, headers=headers)
+response.json()
+```
+
+
+> Example response (200):
+
+```json
+{
+ "activity": {
+ "id": 1,
+ "playlist": {
+ "id": 1,
+ "title": "The Engineering & Design Behind Golf Balls",
+ "is_public": true,
+ "order": 0,
+ "project_id": 1,
+ "project": {
+ "id": 1,
+ "name": "The Science of Golf",
+ "description": "Uncover the science, technology, engineering, and mathematics behind the game of golf.",
+ "thumb_url": "\/storage\/projects\/nN5y8v8zh2ghxrKuHCv5wvJOREFw0Nr27s2DPxWq.png",
+ "starter_project": false,
+ "shared": false,
+ "is_public": true,
+ "users": [
+ {
+ "id": 1,
+ "email": "john.doe@currikistudio.org",
+ "first_name": "John",
+ "last_name": "Doe",
+ "role": "owner"
+ }
+ ],
+ "created_at": "2020-04-30T20:03:12.000000Z",
+ "updated_at": "2020-07-11T12:51:07.000000Z"
+ },
+ "created_at": "2020-04-30T20:03:12.000000Z",
+ "updated_at": "2020-07-11T12:51:07.000000Z"
+ },
+ "title": "Science of Golf: Why Balls Have Dimples",
+ "type": "h5p",
+ "content": "",
+ "shared": false,
+ "order": 2,
+ "thumb_url": null,
+ "subjects": [
+ {
+ "id": 4,
+ "name": "English",
+ "order": 3,
+ "created_at": "2022-01-06T11:59:52.000000Z",
+ "updated_at": "2022-01-06T12:15:10.000000Z"
+ },
+ {
+ "id": 1,
+ "name": "Math",
+ "order": 1,
+ "created_at": "2022-01-06T11:41:46.000000Z",
+ "updated_at": "2022-01-06T11:41:46.000000Z"
+ }
+ ],
+ "education_levels": [
+ {
+ "id": 1,
+ "name": "Grade A",
+ "order": 5,
+ "created_at": "2022-01-07T13:51:38.000000Z",
+ "updated_at": "2022-01-07T14:07:17.000000Z"
+ },
+ {
+ "id": 1,
+ "name": "Grade B",
+ "order": 6,
+ "created_at": "2022-01-07T13:51:38.000000Z",
+ "updated_at": "2022-01-07T14:07:17.000000Z"
+ }
+ ],
+ "author_tags": [
+ {
+ "id": 1,
+ "name": "Audio",
+ "order": 1,
+ "created_at": "2022-01-10T13:09:36.000000Z",
+ "updated_at": "2022-01-10T13:09:36.000000Z"
+ },
+ {
+ "id": 2,
+ "name": "Video",
+ "order": 2,
+ "created_at": "2022-01-10T13:09:44.000000Z",
+ "updated_at": "2022-01-10T13:20:57.000000Z"
+ }
+ ],
+ "h5p": "{\"params\":{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"}}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\" Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\" They reduce wind resistance.<\/p>\\n\",\" They make the ball more visually interesting.<\/p>\\n\",\" They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\" A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\" A low pressure zone, which is what causes drag.<\/p>\\n\",\" The ball has no spin.<\/p>\\n\",\" The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Smooth Ball<\/p>\\n\"}],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}},\"metadata\":{\"title\":\"Science of Golf: Why Balls Have Dimples\",\"license\":\"U\"}}",
+ "h5p_content": {
+ "id": 59,
+ "user_id": 1,
+ "title": "Science of Golf: Why Balls Have Dimples",
+ "library_id": 40,
+ "parameters": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"},\"aspectRatio\":\"16:9\"}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\" Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\" They reduce wind resistance.<\/p>\\n\",\" They make the ball more visually interesting.<\/p>\\n\",\" They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\" A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\" A low pressure zone, which is what causes drag.<\/p>\\n\",\" The ball has no spin.<\/p>\\n\",\" The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Smooth Ball<\/p>\\n\"}],\"bookmarks\":[],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\",\"authors\":[],\"changes\":[],\"extraTitle\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}",
+ "filtered": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"}}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\" Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\" They reduce wind resistance.<\/p>\\n\",\" They make the ball more visually interesting.<\/p>\\n\",\" They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\" A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\" A low pressure zone, which is what causes drag.<\/p>\\n\",\" The ball has no spin.<\/p>\\n\",\" The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Smooth Ball<\/p>\\n\"}],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}",
+ "slug": "science-of-golf-why-balls-have-dimples",
+ "embed_type": "div",
+ "disable": 9,
+ "content_type": null,
+ "authors": null,
+ "source": null,
+ "year_from": null,
+ "year_to": null,
+ "license": "U",
+ "license_version": null,
+ "license_extras": null,
+ "author_comments": null,
+ "changes": null,
+ "default_language": null,
+ "library": {
+ "id": 40,
+ "created_at": null,
+ "updated_at": null,
+ "name": "H5P.InteractiveVideo",
+ "title": "Interactive Video",
+ "major_version": 1,
+ "minor_version": 21,
+ "patch_version": 9,
+ "runnable": 1,
+ "restricted": 0,
+ "fullscreen": 1,
+ "embed_types": "iframe",
+ "preloaded_js": "dist\/h5p-interactive-video.js",
+ "preloaded_css": "dist\/h5p-interactive-video.css",
+ "drop_library_css": "",
+ "semantics": "[\n {\n \"name\": \"interactiveVideo\",\n \"type\": \"group\",\n \"widget\": \"wizard\",\n \"label\": \"Interactive Video Editor\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"video\",\n \"type\": \"group\",\n \"label\": \"Upload\/embed video\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"files\",\n \"type\": \"video\",\n \"label\": \"Add a video\",\n \"importance\": \"high\",\n \"description\": \"Click below to add a video you wish to use in your interactive video. You can add a video link or upload video files. It is possible to add several versions of the video with different qualities. To ensure maximum support in browsers at least add a version in webm and mp4 formats.\",\n \"extraAttributes\": [\n \"metadata\"\n ],\n \"enableCustomQualityLabel\": true\n },\n {\n \"name\": \"startScreenOptions\",\n \"type\": \"group\",\n \"label\": \"Start screen options (unsupported for YouTube videos)\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"title\",\n \"type\": \"text\",\n \"label\": \"The title of this interactive video\",\n \"importance\": \"low\",\n \"maxLength\": 60,\n \"default\": \"Interactive Video\",\n \"description\": \"Used in summaries, statistics etc.\"\n },\n {\n \"name\": \"hideStartTitle\",\n \"type\": \"boolean\",\n \"label\": \"Hide title on video start screen\",\n \"importance\": \"low\",\n \"optional\": true,\n \"default\": false\n },\n {\n \"name\": \"shortStartDescription\",\n \"type\": \"text\",\n \"label\": \"Short description (Optional)\",\n \"importance\": \"low\",\n \"optional\": true,\n \"maxLength\": 120,\n \"description\": \"Optional. Display a short description text on the video start screen. Does not work for YouTube videos.\"\n },\n {\n \"name\": \"poster\",\n \"type\": \"image\",\n \"label\": \"Poster image\",\n \"importance\": \"low\",\n \"optional\": true,\n \"description\": \"Image displayed before the user launches the video. Does not work for YouTube Videos.\"\n }\n ]\n },\n {\n \"name\": \"textTracks\",\n \"type\": \"group\",\n \"label\": \"Text tracks (unsupported for YouTube videos)\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"videoTrack\",\n \"type\": \"list\",\n \"label\": \"Available text tracks\",\n \"importance\": \"low\",\n \"optional\": true,\n \"entity\": \"Track\",\n \"min\": 0,\n \"defaultNum\": 1,\n \"field\": {\n \"name\": \"track\",\n \"type\": \"group\",\n \"label\": \"Track\",\n \"importance\": \"low\",\n \"expanded\": false,\n \"fields\": [\n {\n \"name\": \"label\",\n \"type\": \"text\",\n \"label\": \"Track label\",\n \"description\": \"Used if you offer multiple tracks and the user has to choose a track. For instance 'Spanish subtitles' could be the label of a Spanish subtitle track.\",\n \"importance\": \"low\",\n \"default\": \"Subtitles\",\n \"optional\": true\n },\n {\n \"name\": \"kind\",\n \"type\": \"select\",\n \"label\": \"Type of text track\",\n \"importance\": \"low\",\n \"default\": \"subtitles\",\n \"options\": [\n {\n \"value\": \"subtitles\",\n \"label\": \"Subtitles\"\n },\n {\n \"value\": \"captions\",\n \"label\": \"Captions\"\n },\n {\n \"value\": \"descriptions\",\n \"label\": \"Descriptions\"\n }\n ]\n },\n {\n \"name\": \"srcLang\",\n \"type\": \"text\",\n \"label\": \"Source language, must be defined for subtitles\",\n \"importance\": \"low\",\n \"default\": \"en\",\n \"description\": \"Must be a valid BCP 47 language tag. If 'Subtitles' is the type of text track selected, the source language of the track must be defined.\"\n },\n {\n \"name\": \"track\",\n \"type\": \"file\",\n \"label\": \"Track source (WebVTT file)\",\n \"importance\": \"low\"\n }\n ]\n }\n },\n {\n \"name\": \"defaultTrackLabel\",\n \"type\": \"text\",\n \"label\": \"Default text track\",\n \"description\": \"If left empty or not matching any of the text tracks the first text track will be used as the default.\",\n \"importance\": \"low\",\n \"optional\": true\n }\n ]\n }\n ]\n },\n {\n \"name\": \"assets\",\n \"type\": \"group\",\n \"label\": \"Add interactions\",\n \"importance\": \"high\",\n \"widget\": \"interactiveVideo\",\n \"video\": \"video\/files\",\n \"poster\": \"video\/startScreenOptions\/poster\",\n \"fields\": [\n {\n \"name\": \"interactions\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"interaction\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"duration\",\n \"type\": \"group\",\n \"widget\": \"duration\",\n \"label\": \"Display time\",\n \"importance\": \"low\",\n \"fields\": [\n {\n \"name\": \"from\",\n \"type\": \"number\"\n },\n {\n \"name\": \"to\",\n \"type\": \"number\"\n }\n ]\n },\n {\n \"name\": \"pause\",\n \"label\": \"Pause video\",\n \"importance\": \"low\",\n \"type\": \"boolean\"\n },\n {\n \"name\": \"displayType\",\n \"label\": \"Display as\",\n \"importance\": \"low\",\n \"description\": \"Button<\/b> is a collapsed interaction the user must press to open. Poster<\/b> is an expanded interaction displayed directly on top of the video\",\n \"type\": \"select\",\n \"widget\": \"imageRadioButtonGroup\",\n \"options\": [\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"poster\",\n \"label\": \"Poster\"\n }\n ],\n \"default\": \"button\"\n },\n {\n \"name\": \"buttonOnMobile\",\n \"label\": \"Turn into button on small screens\",\n \"importance\": \"low\",\n \"type\": \"boolean\",\n \"default\": false\n },\n {\n \"name\": \"label\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"label\": \"Label\",\n \"importance\": \"low\",\n \"description\": \"Label displayed next to interaction icon.\",\n \"optional\": true,\n \"enterMode\": \"p\",\n \"tags\": [\n \"p\"\n ]\n },\n {\n \"name\": \"x\",\n \"type\": \"number\",\n \"importance\": \"low\",\n \"widget\": \"none\"\n },\n {\n \"name\": \"y\",\n \"type\": \"number\",\n \"importance\": \"low\",\n \"widget\": \"none\"\n },\n {\n \"name\": \"width\",\n \"type\": \"number\",\n \"widget\": \"none\",\n \"importance\": \"low\",\n \"optional\": true\n },\n {\n \"name\": \"height\",\n \"type\": \"number\",\n \"widget\": \"none\",\n \"importance\": \"low\",\n \"optional\": true\n },\n {\n \"name\": \"libraryTitle\",\n \"type\": \"text\",\n \"importance\": \"low\",\n \"optional\": true,\n \"widget\": \"none\"\n },\n {\n \"name\": \"action\",\n \"type\": \"library\",\n \"importance\": \"low\",\n \"options\": [\n \"H5P.Nil 1.0\",\n \"H5P.Text 1.1\",\n \"H5P.Table 1.1\",\n \"H5P.Link 1.3\",\n \"H5P.Image 1.1\",\n \"H5P.Summary 1.10\",\n \"H5P.SingleChoiceSet 1.11\",\n \"H5P.MultiChoice 1.14\",\n \"H5P.TrueFalse 1.6\",\n \"H5P.Blanks 1.12\",\n \"H5P.DragQuestion 1.13\",\n \"H5P.MarkTheWords 1.9\",\n \"H5P.DragText 1.8\",\n \"H5P.GoToQuestion 1.3\",\n \"H5P.IVHotspot 1.2\",\n \"H5P.Questionnaire 1.2\",\n \"H5P.FreeTextQuestion 1.0\"\n ]\n },\n {\n \"name\": \"adaptivity\",\n \"type\": \"group\",\n \"label\": \"Adaptivity\",\n \"importance\": \"low\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"correct\",\n \"type\": \"group\",\n \"label\": \"Action on all correct\",\n \"fields\": [\n {\n \"name\": \"seekTo\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Seek to\",\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"allowOptOut\",\n \"type\": \"boolean\",\n \"label\": \"Allow the user to opt out and continue\"\n },\n {\n \"name\": \"message\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"enterMode\": \"p\",\n \"tags\": [\n \"strong\",\n \"em\",\n \"del\",\n \"a\",\n \"code\"\n ],\n \"label\": \"Message\"\n },\n {\n \"name\": \"seekLabel\",\n \"type\": \"text\",\n \"label\": \"Label for seek button\"\n }\n ]\n },\n {\n \"name\": \"wrong\",\n \"type\": \"group\",\n \"label\": \"Action on wrong\",\n \"fields\": [\n {\n \"name\": \"seekTo\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Seek to\",\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"allowOptOut\",\n \"type\": \"boolean\",\n \"label\": \"Allow the user to opt out and continue\"\n },\n {\n \"name\": \"message\",\n \"type\": \"text\",\n \"widget\": \"html\",\n \"enterMode\": \"p\",\n \"tags\": [\n \"strong\",\n \"em\",\n \"del\",\n \"a\",\n \"code\"\n ],\n \"label\": \"Message\"\n },\n {\n \"name\": \"seekLabel\",\n \"type\": \"text\",\n \"label\": \"Label for seek button\"\n }\n ]\n },\n {\n \"name\": \"requireCompletion\",\n \"type\": \"boolean\",\n \"label\": \"Require full score for task before proceeding\",\n \"description\": \"For best functionality this option should be used in conjunction with the \\\"Prevent skipping forward in a video\\\" option of Interactive Video.\"\n }\n ]\n },\n {\n \"name\": \"visuals\",\n \"label\": \"Visuals\",\n \"importance\": \"low\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"backgroundColor\",\n \"type\": \"text\",\n \"label\": \"Background color\",\n \"widget\": \"colorSelector\",\n \"default\": \"rgb(255, 255, 255)\",\n \"spectrum\": {\n \"showInput\": true,\n \"showAlpha\": true,\n \"preferredFormat\": \"rgb\",\n \"showPalette\": true,\n \"palette\": [\n [\n \"rgba(0, 0, 0, 0)\"\n ],\n [\n \"rgb(67, 67, 67)\",\n \"rgb(102, 102, 102)\",\n \"rgb(204, 204, 204)\",\n \"rgb(217, 217, 217)\",\n \"rgb(255, 255, 255)\"\n ],\n [\n \"rgb(152, 0, 0)\",\n \"rgb(255, 0, 0)\",\n \"rgb(255, 153, 0)\",\n \"rgb(255, 255, 0)\",\n \"rgb(0, 255, 0)\",\n \"rgb(0, 255, 255)\",\n \"rgb(74, 134, 232)\",\n \"rgb(0, 0, 255)\",\n \"rgb(153, 0, 255)\",\n \"rgb(255, 0, 255)\"\n ],\n [\n \"rgb(230, 184, 175)\",\n \"rgb(244, 204, 204)\",\n \"rgb(252, 229, 205)\",\n \"rgb(255, 242, 204)\",\n \"rgb(217, 234, 211)\",\n \"rgb(208, 224, 227)\",\n \"rgb(201, 218, 248)\",\n \"rgb(207, 226, 243)\",\n \"rgb(217, 210, 233)\",\n \"rgb(234, 209, 220)\",\n \"rgb(221, 126, 107)\",\n \"rgb(234, 153, 153)\",\n \"rgb(249, 203, 156)\",\n \"rgb(255, 229, 153)\",\n \"rgb(182, 215, 168)\",\n \"rgb(162, 196, 201)\",\n \"rgb(164, 194, 244)\",\n \"rgb(159, 197, 232)\",\n \"rgb(180, 167, 214)\",\n \"rgb(213, 166, 189)\",\n \"rgb(204, 65, 37)\",\n \"rgb(224, 102, 102)\",\n \"rgb(246, 178, 107)\",\n \"rgb(255, 217, 102)\",\n \"rgb(147, 196, 125)\",\n \"rgb(118, 165, 175)\",\n \"rgb(109, 158, 235)\",\n \"rgb(111, 168, 220)\",\n \"rgb(142, 124, 195)\",\n \"rgb(194, 123, 160)\",\n \"rgb(166, 28, 0)\",\n \"rgb(204, 0, 0)\",\n \"rgb(230, 145, 56)\",\n \"rgb(241, 194, 50)\",\n \"rgb(106, 168, 79)\",\n \"rgb(69, 129, 142)\",\n \"rgb(60, 120, 216)\",\n \"rgb(61, 133, 198)\",\n \"rgb(103, 78, 167)\",\n \"rgb(166, 77, 121)\",\n \"rgb(91, 15, 0)\",\n \"rgb(102, 0, 0)\",\n \"rgb(120, 63, 4)\",\n \"rgb(127, 96, 0)\",\n \"rgb(39, 78, 19)\",\n \"rgb(12, 52, 61)\",\n \"rgb(28, 69, 135)\",\n \"rgb(7, 55, 99)\",\n \"rgb(32, 18, 77)\",\n \"rgb(76, 17, 48)\"\n ]\n ]\n }\n },\n {\n \"name\": \"boxShadow\",\n \"type\": \"boolean\",\n \"label\": \"Box shadow\",\n \"default\": true,\n \"description\": \"Adds a subtle shadow around the interaction. You might want to disable this for completely transparent interactions\"\n }\n ]\n },\n {\n \"name\": \"goto\",\n \"label\": \"Go to on click\",\n \"importance\": \"low\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"type\",\n \"label\": \"Type\",\n \"type\": \"select\",\n \"widget\": \"selectToggleFields\",\n \"options\": [\n {\n \"value\": \"timecode\",\n \"label\": \"Timecode\",\n \"hideFields\": [\n \"url\"\n ]\n },\n {\n \"value\": \"url\",\n \"label\": \"Another page (URL)\",\n \"hideFields\": [\n \"time\"\n ]\n }\n ],\n \"optional\": true\n },\n {\n \"name\": \"time\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Go To\",\n \"description\": \"The target time the user will be taken to upon pressing the hotspot. Enter timecode in the format M:SS.\",\n \"optional\": true\n },\n {\n \"name\": \"url\",\n \"type\": \"group\",\n \"label\": \"URL\",\n \"widget\": \"linkWidget\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"protocol\",\n \"type\": \"select\",\n \"label\": \"Protocol\",\n \"options\": [\n {\n \"value\": \"http:\/\/\",\n \"label\": \"http:\/\/\"\n },\n {\n \"value\": \"https:\/\/\",\n \"label\": \"https:\/\/\"\n },\n {\n \"value\": \"\/\",\n \"label\": \"(root relative)\"\n },\n {\n \"value\": \"other\",\n \"label\": \"other\"\n }\n ],\n \"optional\": true,\n \"default\": \"http:\/\/\"\n },\n {\n \"name\": \"url\",\n \"type\": \"text\",\n \"label\": \"URL\",\n \"optional\": true\n }\n ]\n },\n {\n \"name\": \"visualize\",\n \"type\": \"boolean\",\n \"label\": \"Visualize\",\n \"description\": \"Show that interaction can be clicked by adding a border and an icon\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"bookmarks\",\n \"importance\": \"low\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"bookmark\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"time\",\n \"type\": \"number\"\n },\n {\n \"name\": \"label\",\n \"type\": \"text\"\n }\n ]\n }\n },\n {\n \"name\": \"endscreens\",\n \"importance\": \"low\",\n \"type\": \"list\",\n \"field\": {\n \"name\": \"endscreen\",\n \"type\": \"group\",\n \"fields\": [\n {\n \"name\": \"time\",\n \"type\": \"number\"\n },\n {\n \"name\": \"label\",\n \"type\": \"text\"\n }\n ]\n }\n }\n ]\n },\n {\n \"name\": \"summary\",\n \"type\": \"group\",\n \"label\": \"Summary task\",\n \"importance\": \"high\",\n \"fields\": [\n {\n \"name\": \"task\",\n \"type\": \"library\",\n \"options\": [\n \"H5P.Summary 1.10\"\n ],\n \"default\": {\n \"library\": \"H5P.Summary 1.10\",\n \"params\": {}\n }\n },\n {\n \"name\": \"displayAt\",\n \"type\": \"number\",\n \"label\": \"Display at\",\n \"description\": \"Number of seconds before the video ends.\",\n \"default\": 3\n }\n ]\n }\n ]\n },\n {\n \"name\": \"override\",\n \"type\": \"group\",\n \"label\": \"Behavioural settings\",\n \"importance\": \"low\",\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"startVideoAt\",\n \"type\": \"number\",\n \"widget\": \"timecode\",\n \"label\": \"Start video at\",\n \"importance\": \"low\",\n \"optional\": true,\n \"description\": \"Enter timecode in the format M:SS\"\n },\n {\n \"name\": \"autoplay\",\n \"type\": \"boolean\",\n \"label\": \"Auto-play video\",\n \"default\": false,\n \"optional\": true,\n \"description\": \"Start playing the video automatically\"\n },\n {\n \"name\": \"loop\",\n \"type\": \"boolean\",\n \"label\": \"Loop the video\",\n \"default\": false,\n \"optional\": true,\n \"description\": \"Check if video should run in a loop\"\n },\n {\n \"name\": \"showSolutionButton\",\n \"type\": \"select\",\n \"label\": \"Override \\\"Show Solution\\\" button\",\n \"importance\": \"low\",\n \"description\": \"This option determines if the \\\"Show Solution\\\" button will be shown for all questions, disabled for all or configured for each question individually.\",\n \"optional\": true,\n \"options\": [\n {\n \"value\": \"on\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"off\",\n \"label\": \"Disabled\"\n }\n ]\n },\n {\n \"name\": \"retryButton\",\n \"type\": \"select\",\n \"label\": \"Override \\\"Retry\\\" button\",\n \"importance\": \"low\",\n \"description\": \"This option determines if the \\\"Retry\\\" button will be shown for all questions, disabled for all or configured for each question individually.\",\n \"optional\": true,\n \"options\": [\n {\n \"value\": \"on\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"off\",\n \"label\": \"Disabled\"\n }\n ]\n },\n {\n \"name\": \"showBookmarksmenuOnLoad\",\n \"type\": \"boolean\",\n \"label\": \"Start with bookmarks menu open\",\n \"importance\": \"low\",\n \"default\": false,\n \"description\": \"This function is not available on iPad when using YouTube as video source.\"\n },\n {\n \"name\": \"showRewind10\",\n \"type\": \"boolean\",\n \"label\": \"Show button for rewinding 10 seconds\",\n \"importance\": \"low\",\n \"default\": false\n },\n {\n \"name\": \"preventSkipping\",\n \"type\": \"boolean\",\n \"default\": false,\n \"label\": \"Prevent skipping forward in a video\",\n \"importance\": \"low\",\n \"description\": \"Enabling this options will disable user video navigation through default controls.\"\n },\n {\n \"name\": \"deactivateSound\",\n \"type\": \"boolean\",\n \"default\": false,\n \"label\": \"Deactivate sound\",\n \"importance\": \"low\",\n \"description\": \"Enabling this option will deactivate the video's sound and prevent it from being switched on.\"\n }\n ]\n },\n {\n \"name\": \"l10n\",\n \"type\": \"group\",\n \"label\": \"Localize\",\n \"importance\": \"low\",\n \"common\": true,\n \"optional\": true,\n \"fields\": [\n {\n \"name\": \"interaction\",\n \"type\": \"text\",\n \"label\": \"Interaction title\",\n \"importance\": \"low\",\n \"default\": \"Interaction\",\n \"optional\": true\n },\n {\n \"name\": \"play\",\n \"type\": \"text\",\n \"label\": \"Play title\",\n \"importance\": \"low\",\n \"default\": \"Play\",\n \"optional\": true\n },\n {\n \"name\": \"pause\",\n \"type\": \"text\",\n \"label\": \"Pause title\",\n \"importance\": \"low\",\n \"default\": \"Pause\",\n \"optional\": true\n },\n {\n \"name\": \"mute\",\n \"type\": \"text\",\n \"label\": \"Mute title\",\n \"importance\": \"low\",\n \"default\": \"Mute\",\n \"optional\": true\n },\n {\n \"name\": \"unmute\",\n \"type\": \"text\",\n \"label\": \"Unmute title\",\n \"importance\": \"low\",\n \"default\": \"Unmute\",\n \"optional\": true\n },\n {\n \"name\": \"quality\",\n \"type\": \"text\",\n \"label\": \"Video quality title\",\n \"importance\": \"low\",\n \"default\": \"Video Quality\",\n \"optional\": true\n },\n {\n \"name\": \"captions\",\n \"type\": \"text\",\n \"label\": \"Video captions title\",\n \"importance\": \"low\",\n \"default\": \"Captions\",\n \"optional\": true\n },\n {\n \"name\": \"close\",\n \"type\": \"text\",\n \"label\": \"Close button text\",\n \"importance\": \"low\",\n \"default\": \"Close\",\n \"optional\": true\n },\n {\n \"name\": \"fullscreen\",\n \"type\": \"text\",\n \"label\": \"Fullscreen title\",\n \"importance\": \"low\",\n \"default\": \"Fullscreen\",\n \"optional\": true\n },\n {\n \"name\": \"exitFullscreen\",\n \"type\": \"text\",\n \"label\": \"Exit fullscreen title\",\n \"importance\": \"low\",\n \"default\": \"Exit Fullscreen\",\n \"optional\": true\n },\n {\n \"name\": \"summary\",\n \"type\": \"text\",\n \"label\": \"Summary title\",\n \"importance\": \"low\",\n \"default\": \"Open summary dialog\",\n \"optional\": true\n },\n {\n \"name\": \"bookmarks\",\n \"type\": \"text\",\n \"label\": \"Bookmarks title\",\n \"importance\": \"low\",\n \"default\": \"Bookmarks\",\n \"optional\": true\n },\n {\n \"name\": \"endscreen\",\n \"type\": \"text\",\n \"label\": \"Submit screen title\",\n \"importance\": \"low\",\n \"default\": \"Submit screen\",\n \"optional\": true\n },\n {\n \"name\": \"defaultAdaptivitySeekLabel\",\n \"type\": \"text\",\n \"label\": \"Default label for adaptivity seek button\",\n \"importance\": \"low\",\n \"default\": \"Continue\",\n \"optional\": true\n },\n {\n \"name\": \"continueWithVideo\",\n \"type\": \"text\",\n \"label\": \"Default label for continue video button\",\n \"importance\": \"low\",\n \"default\": \"Continue with video\",\n \"optional\": true\n },\n {\n \"name\": \"playbackRate\",\n \"type\": \"text\",\n \"label\": \"Set playback rate\",\n \"importance\": \"low\",\n \"default\": \"Playback Rate\",\n \"optional\": true\n },\n {\n \"name\": \"rewind10\",\n \"type\": \"text\",\n \"label\": \"Rewind 10 Seconds\",\n \"importance\": \"low\",\n \"default\": \"Rewind 10 Seconds\",\n \"optional\": true\n },\n {\n \"name\": \"navDisabled\",\n \"type\": \"text\",\n \"label\": \"Navigation is disabled text\",\n \"importance\": \"low\",\n \"default\": \"Navigation is disabled\",\n \"optional\": true\n },\n {\n \"name\": \"sndDisabled\",\n \"type\": \"text\",\n \"label\": \"Sound is disabled text\",\n \"importance\": \"low\",\n \"default\": \"Sound is disabled\",\n \"optional\": true\n },\n {\n \"name\": \"requiresCompletionWarning\",\n \"type\": \"text\",\n \"label\": \"Warning that the user must answer the question correctly before continuing\",\n \"importance\": \"low\",\n \"default\": \"You need to answer all the questions correctly before continuing.\",\n \"optional\": true\n },\n {\n \"name\": \"back\",\n \"type\": \"text\",\n \"label\": \"Back button\",\n \"importance\": \"low\",\n \"default\": \"Back\",\n \"optional\": true\n },\n {\n \"name\": \"hours\",\n \"type\": \"text\",\n \"label\": \"Passed time hours\",\n \"importance\": \"low\",\n \"default\": \"Hours\",\n \"optional\": true\n },\n {\n \"name\": \"minutes\",\n \"type\": \"text\",\n \"label\": \"Passed time minutes\",\n \"importance\": \"low\",\n \"default\": \"Minutes\",\n \"optional\": true\n },\n {\n \"name\": \"seconds\",\n \"type\": \"text\",\n \"label\": \"Passed time seconds\",\n \"importance\": \"low\",\n \"default\": \"Seconds\",\n \"optional\": true\n },\n {\n \"name\": \"currentTime\",\n \"type\": \"text\",\n \"label\": \"Label for current time\",\n \"importance\": \"low\",\n \"default\": \"Current time:\",\n \"optional\": true\n },\n {\n \"name\": \"totalTime\",\n \"type\": \"text\",\n \"label\": \"Label for total time\",\n \"importance\": \"low\",\n \"default\": \"Total time:\",\n \"optional\": true\n },\n {\n \"name\": \"singleInteractionAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Text explaining that a single interaction with a name has come into view\",\n \"importance\": \"low\",\n \"default\": \"Interaction appeared:\",\n \"optional\": true\n },\n {\n \"name\": \"multipleInteractionsAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Text for explaining that multiple interactions have come into view\",\n \"importance\": \"low\",\n \"default\": \"Multiple interactions appeared.\",\n \"optional\": true\n },\n {\n \"name\": \"videoPausedAnnouncement\",\n \"type\": \"text\",\n \"label\": \"Video is paused announcement\",\n \"importance\": \"low\",\n \"default\": \"Video is paused\",\n \"optional\": true\n },\n {\n \"name\": \"content\",\n \"type\": \"text\",\n \"label\": \"Content label\",\n \"importance\": \"low\",\n \"default\": \"Content\",\n \"optional\": true\n },\n {\n \"name\": \"answered\",\n \"type\": \"text\",\n \"label\": \"Answered message (@answered will be replaced with the number of answered questions)\",\n \"importance\": \"low\",\n \"default\": \"@answered answered\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTitle\",\n \"type\": \"text\",\n \"label\": \"Submit screen title\",\n \"importance\": \"low\",\n \"default\": \"@answered Question(s) answered\",\n \"description\": \"@answered will be replaced by the number of answered questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformation\",\n \"type\": \"text\",\n \"label\": \"Submit screen information\",\n \"importance\": \"low\",\n \"default\": \"You have answered @answered questions, click below to submit your answers.\",\n \"description\": \"@answered will be replaced by the number of answered questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformationNoAnswers\",\n \"type\": \"text\",\n \"label\": \"Submit screen information for missing answers\",\n \"importance\": \"low\",\n \"default\": \"You have not answered any questions.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardInformationMustHaveAnswer\",\n \"type\": \"text\",\n \"label\": \"Submit screen information for answer needed\",\n \"importance\": \"low\",\n \"default\": \"You have to answer at least one question before you can submit your answers.\",\n \"optional\": true\n },\n {\n \"name\": \"endcardSubmitButton\",\n \"type\": \"text\",\n \"label\": \"Submit screen submit button\",\n \"importance\": \"low\",\n \"default\": \"Submit Answers\",\n \"optional\": true\n },\n {\n \"name\": \"endcardSubmitMessage\",\n \"type\": \"text\",\n \"label\": \"Submit screen submit message\",\n \"importance\": \"low\",\n \"default\": \"Your answers have been submitted!\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTableRowAnswered\",\n \"type\": \"text\",\n \"label\": \"Submit screen table row title: Answered questions\",\n \"importance\": \"low\",\n \"default\": \"Answered questions\",\n \"optional\": true\n },\n {\n \"name\": \"endcardTableRowScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen table row title: Score\",\n \"importance\": \"low\",\n \"default\": \"Score\",\n \"optional\": true\n },\n {\n \"name\": \"endcardAnsweredScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen answered score\",\n \"importance\": \"low\",\n \"default\": \"answered\",\n \"optional\": true\n },\n {\n \"name\": \"endCardTableRowSummaryWithScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen row summary including score (for readspeakers)\",\n \"importance\": \"low\",\n \"default\": \"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\n \"optional\": true\n },\n {\n \"name\": \"endCardTableRowSummaryWithoutScore\",\n \"type\": \"text\",\n \"label\": \"Submit screen row summary for no score (for readspeakers)\",\n \"importance\": \"low\",\n \"default\": \"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\",\n \"optional\": true\n }\n ]\n }\n]",
+ "tutorial_url": "",
+ "has_icon": 1
+ },
+ "created_at": "2020-09-30T20:24:58.000000Z",
+ "updated_at": "2020-09-30T20:24:58.000000Z"
+ },
+ "library_name": "H5P.InteractiveVideo",
+ "major_version": 1,
+ "minor_version": 21,
+ "user_name": null,
+ "user_id": null,
+ "created_at": "2020-09-30T20:24:58.000000Z",
+ "updated_at": "2020-09-30T20:24:58.000000Z"
+ }
+}
+```
+
+### HTTP Request
+`GET api/v1/activities/{activity}/detail`
+
+#### URL Parameters
+
+Parameter | Status | Description
+--------- | ------- | ------- | -------
+ `activity` | required | The Id of a activity
+
+
+
+
+## H5P Activity
+
+> Example request:
+
+```bash
+curl -X GET \
+ -G "http://localhost:8000/api/v1/activities/1/h5p" \
+ -H "Content-Type: application/json" \
+ -H "Accept: application/json"
+```
+
+```javascript
+const url = new URL(
+ "http://localhost:8000/api/v1/activities/1/h5p"
+);
+
+let headers = {
+ "Content-Type": "application/json",
+ "Accept": "application/json",
+};
+
+fetch(url, {
+ method: "GET",
+ headers: headers,
+})
+ .then(response => response.json())
+ .then(json => console.log(json));
+```
+
+```php
+
+$client = new \GuzzleHttp\Client();
+$response = $client->get(
+ 'http://localhost:8000/api/v1/activities/1/h5p',
+ [
+ 'headers' => [
+ 'Content-Type' => 'application/json',
+ 'Accept' => 'application/json',
+ ],
+ ]
+);
+$body = $response->getBody();
+print_r(json_decode((string) $body));
+```
+
+```python
+import requests
+import json
+
+url = 'http://localhost:8000/api/v1/activities/1/h5p'
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'
+}
+response = requests.request('GET', url, headers=headers)
+response.json()
+```
+
+
+> Example response (200):
+
+```json
+{
+ "activity": {
+ "id": 1,
+ "title": "Science of Golf: Why Balls Have Dimples",
+ "type": "h5p",
+ "content": "",
+ "shared": false,
+ "order": 2,
+ "thumb_url": null,
+ "subject_id": null,
+ "education_level_id": null,
+ "h5p": {
+ "settings": {
+ "baseUrl": "https:\/\/www.currikistudio.org\/api",
+ "url": "https:\/\/www.currikistudio.org\/api\/storage\/h5p",
+ "postUserStatistics": true,
+ "ajax": {
+ "setFinished": "https:\/\/www.currikistudio.org\/api\/api\/h5p\/ajax\/url",
+ "contentUserData": "https:\/\/www.currikistudio.org\/api\/api\/h5p\/ajax\/content-user-data\/?content_id=:contentId&data_type=:dataType&sub_content_id=:subContentId"
+ },
+ "saveFreq": false,
+ "siteUrl": "https:\/\/www.currikistudio.org\/api",
+ "l10n": {
+ "H5P": {
+ "fullscreen": "Fullscreen",
+ "disableFullscreen": "Disable fullscreen",
+ "download": "Download",
+ "copyrights": "Rights of use",
+ "embed": "Embed",
+ "reuseDescription": "Reuse this content.",
+ "size": "Size",
+ "showAdvanced": "Show advanced",
+ "hideAdvanced": "Hide advanced",
+ "advancedHelp": "Include this script on your website if you want dynamic sizing of the embedded content:",
+ "copyrightInformation": "Rights of use",
+ "close": "Close",
+ "title": "Title",
+ "author": "Author",
+ "year": "Year",
+ "source": "Source",
+ "license": "License",
+ "thumbnail": "Thumbnail",
+ "noCopyrights": "No copyright information available for this content.",
+ "downloadDescription": "Download this content as a H5P file.",
+ "copyrightsDescription": "View copyright information for this content.",
+ "embedDescription": "View the embed code for this content.",
+ "h5pDescription": "Visit H5P.org to check out more cool content.",
+ "contentChanged": "This content has changed since you last used it.",
+ "startingOver": "You'll be starting over.",
+ "confirmDialogHeader": "Confirm action",
+ "confirmDialogBody": "Please confirm that you wish to proceed. This action is not reversible.",
+ "cancelLabel": "Cancel",
+ "confirmLabel": "Confirm",
+ "reuse": "Reuse",
+ "reuseContent": "Reuse Content"
+ }
+ },
+ "hubIsEnabled": false,
+ "user": {
+ "name": "John Doe",
+ "email": "john.doe@currikistudio.org"
+ },
+ "editor": {
+ "filesPath": "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/editor",
+ "fileIcon": {
+ "path": "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/images\/binary-file.png",
+ "width": 50,
+ "height": 50
+ },
+ "ajaxPath": "https:\/\/www.currikistudio.org\/api\/api\/v1\/h5p\/ajax\/",
+ "libraryUrl": "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/",
+ "copyrightSemantics": {
+ "name": "copyright",
+ "type": "group",
+ "label": "Copyright information",
+ "fields": [
+ {
+ "name": "title",
+ "type": "text",
+ "label": "Title",
+ "placeholder": "La Gioconda",
+ "optional": true
+ },
+ {
+ "name": "author",
+ "type": "text",
+ "label": "Author",
+ "placeholder": "Leonardo da Vinci",
+ "optional": true
+ },
+ {
+ "name": "year",
+ "type": "text",
+ "label": "Year(s)",
+ "placeholder": "1503 - 1517",
+ "optional": true
+ },
+ {
+ "name": "source",
+ "type": "text",
+ "label": "Source",
+ "placeholder": "http:\/\/en.wikipedia.org\/wiki\/Mona_Lisa",
+ "optional": true,
+ "regexp": {
+ "pattern": "^http[s]?:\/\/.+",
+ "modifiers": "i"
+ }
+ },
+ {
+ "name": "license",
+ "type": "select",
+ "label": "License",
+ "default": "U",
+ "options": [
+ {
+ "value": "U",
+ "label": "Undisclosed"
+ },
+ {
+ "value": "CC BY",
+ "label": "Attribution",
+ "versions": [
+ {
+ "value": "4.0",
+ "label": "4.0 International"
+ },
+ {
+ "value": "3.0",
+ "label": "3.0 Unported"
+ },
+ {
+ "value": "2.5",
+ "label": "2.5 Generic"
+ },
+ {
+ "value": "2.0",
+ "label": "2.0 Generic"
+ },
+ {
+ "value": "1.0",
+ "label": "1.0 Generic"
+ }
+ ]
+ },
+ {
+ "value": "CC BY-SA",
+ "label": "Attribution-ShareAlike",
+ "versions": [
+ {
+ "value": "4.0",
+ "label": "4.0 International"
+ },
+ {
+ "value": "3.0",
+ "label": "3.0 Unported"
+ },
+ {
+ "value": "2.5",
+ "label": "2.5 Generic"
+ },
+ {
+ "value": "2.0",
+ "label": "2.0 Generic"
+ },
+ {
+ "value": "1.0",
+ "label": "1.0 Generic"
+ }
+ ]
+ },
+ {
+ "value": "CC BY-ND",
+ "label": "Attribution-NoDerivs",
+ "versions": [
+ {
+ "value": "4.0",
+ "label": "4.0 International"
+ },
+ {
+ "value": "3.0",
+ "label": "3.0 Unported"
+ },
+ {
+ "value": "2.5",
+ "label": "2.5 Generic"
+ },
+ {
+ "value": "2.0",
+ "label": "2.0 Generic"
+ },
+ {
+ "value": "1.0",
+ "label": "1.0 Generic"
+ }
+ ]
+ },
+ {
+ "value": "CC BY-NC",
+ "label": "Attribution-NonCommercial",
+ "versions": [
+ {
+ "value": "4.0",
+ "label": "4.0 International"
+ },
+ {
+ "value": "3.0",
+ "label": "3.0 Unported"
+ },
+ {
+ "value": "2.5",
+ "label": "2.5 Generic"
+ },
+ {
+ "value": "2.0",
+ "label": "2.0 Generic"
+ },
+ {
+ "value": "1.0",
+ "label": "1.0 Generic"
+ }
+ ]
+ },
+ {
+ "value": "CC BY-NC-SA",
+ "label": "Attribution-NonCommercial-ShareAlike",
+ "versions": [
+ {
+ "value": "4.0",
+ "label": "4.0 International"
+ },
+ {
+ "value": "3.0",
+ "label": "3.0 Unported"
+ },
+ {
+ "value": "2.5",
+ "label": "2.5 Generic"
+ },
+ {
+ "value": "2.0",
+ "label": "2.0 Generic"
+ },
+ {
+ "value": "1.0",
+ "label": "1.0 Generic"
+ }
+ ]
+ },
+ {
+ "value": "CC BY-NC-ND",
+ "label": "Attribution-NonCommercial-NoDerivs",
+ "versions": [
+ {
+ "value": "4.0",
+ "label": "4.0 International"
+ },
+ {
+ "value": "3.0",
+ "label": "3.0 Unported"
+ },
+ {
+ "value": "2.5",
+ "label": "2.5 Generic"
+ },
+ {
+ "value": "2.0",
+ "label": "2.0 Generic"
+ },
+ {
+ "value": "1.0",
+ "label": "1.0 Generic"
+ }
+ ]
+ },
+ {
+ "value": "GNU GPL",
+ "label": "General Public License",
+ "versions": [
+ {
+ "value": "v3",
+ "label": "Version 3"
+ },
+ {
+ "value": "v2",
+ "label": "Version 2"
+ },
+ {
+ "value": "v1",
+ "label": "Version 1"
+ }
+ ]
+ },
+ {
+ "value": "PD",
+ "label": "Public Domain",
+ "versions": [
+ {
+ "value": "-",
+ "label": "-"
+ },
+ {
+ "value": "CC0 1.0",
+ "label": "CC0 1.0 Universal"
+ },
+ {
+ "value": "CC PDM",
+ "label": "Public Domain Mark"
+ }
+ ]
+ },
+ {
+ "value": "C",
+ "label": "Copyright"
+ }
+ ]
+ },
+ {
+ "name": "version",
+ "type": "select",
+ "label": "License Version",
+ "options": []
+ }
+ ]
+ },
+ "metadataSemantics": [
+ {
+ "name": "title",
+ "type": "text",
+ "label": "Title",
+ "placeholder": "La Gioconda"
+ },
+ {
+ "name": "license",
+ "type": "select",
+ "label": "License",
+ "default": "U",
+ "options": [
+ {
+ "value": "U",
+ "label": "Undisclosed"
+ },
+ {
+ "type": "optgroup",
+ "label": "Creative Commons",
+ "options": [
+ {
+ "value": "CC BY",
+ "label": "Attribution (CC BY)",
+ "versions": [
+ {
+ "value": "4.0",
+ "label": "4.0 International"
+ },
+ {
+ "value": "3.0",
+ "label": "3.0 Unported"
+ },
+ {
+ "value": "2.5",
+ "label": "2.5 Generic"
+ },
+ {
+ "value": "2.0",
+ "label": "2.0 Generic"
+ },
+ {
+ "value": "1.0",
+ "label": "1.0 Generic"
+ }
+ ]
+ },
+ {
+ "value": "CC BY-SA",
+ "label": "Attribution-ShareAlike (CC BY-SA)",
+ "versions": [
+ {
+ "value": "4.0",
+ "label": "4.0 International"
+ },
+ {
+ "value": "3.0",
+ "label": "3.0 Unported"
+ },
+ {
+ "value": "2.5",
+ "label": "2.5 Generic"
+ },
+ {
+ "value": "2.0",
+ "label": "2.0 Generic"
+ },
+ {
+ "value": "1.0",
+ "label": "1.0 Generic"
+ }
+ ]
+ },
+ {
+ "value": "CC BY-ND",
+ "label": "Attribution-NoDerivs (CC BY-ND)",
+ "versions": [
+ {
+ "value": "4.0",
+ "label": "4.0 International"
+ },
+ {
+ "value": "3.0",
+ "label": "3.0 Unported"
+ },
+ {
+ "value": "2.5",
+ "label": "2.5 Generic"
+ },
+ {
+ "value": "2.0",
+ "label": "2.0 Generic"
+ },
+ {
+ "value": "1.0",
+ "label": "1.0 Generic"
+ }
+ ]
+ },
+ {
+ "value": "CC BY-NC",
+ "label": "Attribution-NonCommercial (CC BY-NC)",
+ "versions": [
+ {
+ "value": "4.0",
+ "label": "4.0 International"
+ },
+ {
+ "value": "3.0",
+ "label": "3.0 Unported"
+ },
+ {
+ "value": "2.5",
+ "label": "2.5 Generic"
+ },
+ {
+ "value": "2.0",
+ "label": "2.0 Generic"
+ },
+ {
+ "value": "1.0",
+ "label": "1.0 Generic"
+ }
+ ]
+ },
+ {
+ "value": "CC BY-NC-SA",
+ "label": "Attribution-NonCommercial-ShareAlike (CC BY-NC-SA)",
+ "versions": [
+ {
+ "value": "4.0",
+ "label": "4.0 International"
+ },
+ {
+ "value": "3.0",
+ "label": "3.0 Unported"
+ },
+ {
+ "value": "2.5",
+ "label": "2.5 Generic"
+ },
+ {
+ "value": "2.0",
+ "label": "2.0 Generic"
+ },
+ {
+ "value": "1.0",
+ "label": "1.0 Generic"
+ }
+ ]
+ },
+ {
+ "value": "CC BY-NC-ND",
+ "label": "Attribution-NonCommercial-NoDerivs (CC BY-NC-ND)",
+ "versions": [
+ {
+ "value": "4.0",
+ "label": "4.0 International"
+ },
+ {
+ "value": "3.0",
+ "label": "3.0 Unported"
+ },
+ {
+ "value": "2.5",
+ "label": "2.5 Generic"
+ },
+ {
+ "value": "2.0",
+ "label": "2.0 Generic"
+ },
+ {
+ "value": "1.0",
+ "label": "1.0 Generic"
+ }
+ ]
+ },
+ {
+ "value": "CC0 1.0",
+ "label": "Public Domain Dedication (CC0)"
+ },
+ {
+ "value": "CC PDM",
+ "label": "Public Domain Mark (PDM)"
+ }
+ ]
+ },
+ {
+ "value": "GNU GPL",
+ "label": "General Public License v3"
+ },
+ {
+ "value": "PD",
+ "label": "Public Domain"
+ },
+ {
+ "value": "ODC PDDL",
+ "label": "Public Domain Dedication and Licence"
+ },
+ {
+ "value": "C",
+ "label": "Copyright"
+ }
+ ]
+ },
+ {
+ "name": "licenseVersion",
+ "type": "select",
+ "label": "License Version",
+ "options": [
+ {
+ "value": "4.0",
+ "label": "4.0 International"
+ },
+ {
+ "value": "3.0",
+ "label": "3.0 Unported"
+ },
+ {
+ "value": "2.5",
+ "label": "2.5 Generic"
+ },
+ {
+ "value": "2.0",
+ "label": "2.0 Generic"
+ },
+ {
+ "value": "1.0",
+ "label": "1.0 Generic"
+ }
+ ],
+ "optional": true
+ },
+ {
+ "name": "yearFrom",
+ "type": "number",
+ "label": "Years (from)",
+ "placeholder": "1991",
+ "min": "-9999",
+ "max": "9999",
+ "optional": true
+ },
+ {
+ "name": "yearTo",
+ "type": "number",
+ "label": "Years (to)",
+ "placeholder": "1992",
+ "min": "-9999",
+ "max": "9999",
+ "optional": true
+ },
+ {
+ "name": "source",
+ "type": "text",
+ "label": "Source",
+ "placeholder": "https:\/\/",
+ "optional": true
+ },
+ {
+ "name": "authors",
+ "type": "list",
+ "field": {
+ "name": "author",
+ "type": "group",
+ "fields": [
+ {
+ "label": "Author's name",
+ "name": "name",
+ "optional": true,
+ "type": "text"
+ },
+ {
+ "name": "role",
+ "type": "select",
+ "label": "Author's role",
+ "default": "Author",
+ "options": [
+ {
+ "value": "Author",
+ "label": "Author"
+ },
+ {
+ "value": "Editor",
+ "label": "Editor"
+ },
+ {
+ "value": "Licensee",
+ "label": "Licensee"
+ },
+ {
+ "value": "Originator",
+ "label": "Originator"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "licenseExtras",
+ "type": "text",
+ "widget": "textarea",
+ "label": "License Extras",
+ "optional": true,
+ "description": "Any additional information about the license"
+ },
+ {
+ "name": "changes",
+ "type": "list",
+ "field": {
+ "name": "change",
+ "type": "group",
+ "label": "Changelog",
+ "fields": [
+ {
+ "name": "date",
+ "type": "text",
+ "label": "Date",
+ "optional": true
+ },
+ {
+ "name": "author",
+ "type": "text",
+ "label": "Changed by",
+ "optional": true
+ },
+ {
+ "name": "log",
+ "type": "text",
+ "widget": "textarea",
+ "label": "Description of change",
+ "placeholder": "Photo cropped, text changed, etc.",
+ "optional": true
+ }
+ ]
+ }
+ },
+ {
+ "name": "authorComments",
+ "type": "text",
+ "widget": "textarea",
+ "label": "Author comments",
+ "description": "Comments for the editor of the content (This text will not be published as a part of copyright info)",
+ "optional": true
+ },
+ {
+ "name": "contentType",
+ "type": "text",
+ "widget": "none"
+ },
+ {
+ "name": "defaultLanguage",
+ "type": "text",
+ "widget": "none"
+ }
+ ],
+ "assets": {
+ "css": [
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/laravel-h5p\/css\/laravel-h5p.css",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/styles\/h5p.css",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/styles\/h5p-confirmation-dialog.css",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/styles\/h5p-core-button.css",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/libs\/darkroom.css",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/styles\/css\/h5p-hub-client.css",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/styles\/css\/fonts.css",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/styles\/css\/application.css",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/styles\/css\/libs\/zebra_datepicker.min.css"
+ ],
+ "js": [
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/jquery.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/h5p.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/h5p-event-dispatcher.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/h5p-x-api-event.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/h5p-x-api.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/h5p-content-type.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/h5p-confirmation-dialog.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/h5p-action-bar.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/request-queue.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-editor.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/laravel-h5p\/js\/laravel-h5p.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-help-dialog.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-message-dialog.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-progress-circle.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-simple-rounded-button.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-speech-bubble.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-throbber.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-tip.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-slider.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-score-bar.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-progressbar.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-ui.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/laravel-h5p\/js\/laravel-h5p-editor.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5p-hub-client.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-semantic-structure.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-library-selector.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-fullscreen-bar.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-form.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-text.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-html.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-number.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-textarea.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-file-uploader.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-file.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-image.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-image-popup.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-av.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-group.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-boolean.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-list.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-list-editor.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-library.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-library-list-cache.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-select.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-selector-hub.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-selector-legacy.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-dimensions.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-coordinates.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-none.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-metadata.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-metadata-author-widget.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-metadata-changelog-widget.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-pre-save.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/ckeditor\/ckeditor.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/language\/en.js"
+ ]
+ },
+ "deleteMessage": "laravel-h5p.content.destoryed",
+ "apiVersion": {
+ "majorVersion": 1,
+ "minorVersion": 24
+ }
+ },
+ "loadedJs": [],
+ "loadedCss": [],
+ "core": {
+ "styles": [
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/laravel-h5p\/css\/laravel-h5p.css",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/styles\/h5p.css",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/styles\/h5p-confirmation-dialog.css",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/styles\/h5p-core-button.css"
+ ],
+ "scripts": [
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/jquery.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/h5p.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/h5p-event-dispatcher.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/h5p-x-api-event.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/h5p-x-api.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/h5p-content-type.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/h5p-confirmation-dialog.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/h5p-action-bar.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-core\/js\/request-queue.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/h5p-editor\/scripts\/h5peditor-editor.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/laravel-h5p\/js\/laravel-h5p.js",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-help-dialog.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-message-dialog.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-progress-circle.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-simple-rounded-button.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-speech-bubble.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-throbber.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-tip.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-slider.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-score-bar.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-progressbar.js?ver=1.3.9",
+ "https:\/\/www.currikistudio.org\/api\/storage\/h5p\/libraries\/H5P.JoubelUI-1.3\/js\/joubel-ui.js?ver=1.3.9"
+ ]
+ },
+ "contents": {
+ "cid-59": {
+ "library": "H5P.InteractiveVideo 1.21",
+ "jsonContent": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"}}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\" Why do golf balls have dimples?<\/p>\\n\",\"answers\":[\" They reduce wind resistance.<\/p>\\n\",\" They make the ball more visually interesting.<\/p>\\n\",\" They grip the putting green better than a smooth ball.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"ac029b43-7225-49ed-a2d7-8656037748e0\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Why do golf balls have dimples?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Why do golf balls have dimples?<\/p>\\n\"},{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":132.969,\"to\":142.969},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"308503f3-8d41-4f4f-b016-587bcce3dfac\",\"question\":\" A smooth ball will have a detached airflow, which causes what?<\/p>\\n\",\"answers\":[\" A low pressure zone, which is what causes drag.<\/p>\\n\",\" The ball has no spin.<\/p>\\n\",\" The ball travels higher, but for a shorter distance.<\/p>\\n\"]}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"behaviour\":{\"autoContinue\":true,\"timeoutCorrect\":2000,\"timeoutWrong\":3000,\"soundEffectsEnabled\":true,\"enableRetry\":true,\"enableSolutionsButton\":true,\"passPercentage\":100},\"l10n\":{\"nextButtonLabel\":\"Next question\",\"showSolutionButtonLabel\":\"Show solution\",\"retryButtonLabel\":\"Retry\",\"solutionViewTitle\":\"Solution list\",\"correctText\":\"Correct!\",\"incorrectText\":\"Incorrect!\",\"muteButtonLabel\":\"Mute feedback sound\",\"closeButtonLabel\":\"Close\",\"slideOfTotal\":\"Slide :num of :total\",\"scoreBarLabel\":\"You got :num out of :total points\",\"solutionListQuestionNumber\":\"Question :num\"}},\"subContentId\":\"f70c849d-9542-4f30-9116-8b60b7da708d\",\"metadata\":{\"contentType\":\"Single Choice Set\",\"license\":\"U\",\"title\":\"Smooth Ball?\"}},\"pause\":false,\"displayType\":\"button\",\"buttonOnMobile\":false,\"adaptivity\":{\"correct\":{\"allowOptOut\":false,\"message\":\"\"},\"wrong\":{\"allowOptOut\":false,\"message\":\"\"},\"requireCompletion\":false},\"label\":\" Smooth Ball<\/p>\\n\"}],\"endscreens\":[{\"time\":295,\"label\":\"4:55 Submit screen\"}]},\"summary\":{\"task\":{\"library\":\"H5P.Summary 1.10\",\"params\":{\"intro\":\"Choose the correct statement.\",\"summaries\":[{\"subContentId\":\"8e2cf84f-4557-4f79-a03e-526838498a7d\",\"tip\":\"\"}],\"overallFeedback\":[{\"from\":0,\"to\":100}],\"solvedLabel\":\"Progress:\",\"scoreLabel\":\"Wrong answers:\",\"resultLabel\":\"Your result\",\"labelCorrect\":\"Correct.\",\"labelIncorrect\":\"Incorrect! Please try again.\",\"alternativeIncorrectLabel\":\"Incorrect\",\"labelCorrectAnswers\":\"Correct answers.\",\"tipButtonLabel\":\"Show tip\",\"scoreBarLabel\":\"You got :num out of :total points\",\"progressText\":\"Progress :num of :total\"},\"subContentId\":\"8d5527ef-3601-4ad9-9e63-2782c9775173\",\"metadata\":{\"contentType\":\"Summary\",\"license\":\"U\",\"title\":\"Untitled Summary\"}},\"displayAt\":3}},\"override\":{\"autoplay\":false,\"loop\":false,\"showBookmarksmenuOnLoad\":false,\"showRewind10\":false,\"preventSkipping\":false,\"deactivateSound\":false},\"l10n\":{\"interaction\":\"Interaction\",\"play\":\"Play\",\"pause\":\"Pause\",\"mute\":\"Mute\",\"unmute\":\"Unmute\",\"quality\":\"Video Quality\",\"captions\":\"Captions\",\"close\":\"Close\",\"fullscreen\":\"Fullscreen\",\"exitFullscreen\":\"Exit Fullscreen\",\"summary\":\"Open summary dialog\",\"bookmarks\":\"Bookmarks\",\"endscreen\":\"Submit screen\",\"defaultAdaptivitySeekLabel\":\"Continue\",\"continueWithVideo\":\"Continue with video\",\"playbackRate\":\"Playback Rate\",\"rewind10\":\"Rewind 10 Seconds\",\"navDisabled\":\"Navigation is disabled\",\"sndDisabled\":\"Sound is disabled\",\"requiresCompletionWarning\":\"You need to answer all the questions correctly before continuing.\",\"back\":\"Back\",\"hours\":\"Hours\",\"minutes\":\"Minutes\",\"seconds\":\"Seconds\",\"currentTime\":\"Current time:\",\"totalTime\":\"Total time:\",\"singleInteractionAnnouncement\":\"Interaction appeared:\",\"multipleInteractionsAnnouncement\":\"Multiple interactions appeared.\",\"videoPausedAnnouncement\":\"Video is paused\",\"content\":\"Content\",\"answered\":\"@answered answered\",\"endcardTitle\":\"@answered Question(s) answered\",\"endcardInformation\":\"You have answered @answered questions, click below to submit your answers.\",\"endcardInformationNoAnswers\":\"You have not answered any questions.\",\"endcardInformationMustHaveAnswer\":\"You have to answer at least one question before you can submit your answers.\",\"endcardSubmitButton\":\"Submit Answers\",\"endcardSubmitMessage\":\"Your answers have been submitted!\",\"endcardTableRowAnswered\":\"Answered questions\",\"endcardTableRowScore\":\"Score\",\"endcardAnsweredScore\":\"answered\",\"endCardTableRowSummaryWithScore\":\"You got @score out of @total points for the @question that appeared after @minutes minutes and @seconds seconds.\",\"endCardTableRowSummaryWithoutScore\":\"You have answered the @question that appeared after @minutes minutes and @seconds seconds.\"}}",
+ "fullScreen": 1,
+ "exportUrl": "https:\/\/www.currikistudio.org\/api\/h5p\/export\/59",
+ "embedCode": "
\\n <\/p>\\n\"},{\"asset\":{\"thumbnail\":{\"path\":\"images\/thumbnail-5eab658fa6bde.jpg#tmp\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":1350,\"height\":759},\"media\":\"https:\/\/images.app.goo.gl\/MFHFL1dtDiyR5nGq7\"},\"startDate\":\"1848\",\"headline\":\"Cost of Golf Balls\",\"text\":\"
\\n <\/p>\\n\"},{\"asset\":{\"thumbnail\":{\"path\":\"images\/thumbnail-5eab65cbe1adb.png#tmp\",\"mime\":\"image\/png\",\"copyright\":{\"license\":\"U\"},\"width\":944,\"height\":890}},\"startDate\":\"1848\",\"endDate\":\"1890\",\"headline\":\"Gutty Golf Balls\",\"text\":\"
\\n <\/p>\\n\"},{\"asset\":{\"thumbnail\":{\"path\":\"images\/thumbnail-5eab658fa6bde.jpg\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":1350,\"height\":759},\"media\":\"https:\/\/images.app.goo.gl\/MFHFL1dtDiyR5nGq7\"},\"startDate\":\"1848\",\"headline\":\"Cost of Golf Balls\",\"text\":\"
\\n <\/p>\\n\"},{\"asset\":{\"thumbnail\":{\"path\":\"images\/thumbnail-5eab65cbe1adb.png\",\"mime\":\"image\/png\",\"copyright\":{\"license\":\"U\"},\"width\":944,\"height\":890}},\"startDate\":\"1848\",\"endDate\":\"1890\",\"headline\":\"Gutty Golf Balls\",\"text\":\"
\\nAT&T Pro Am<\/p>\\n\"},{\"answer\":\"12th hole at Augusta National\",\"image\":{\"path\":\"images\/image-5eabae675c197.jpg#tmp\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":847,\"height\":467},\"tip\":\"\"},{\"answer\":\"7th hole at TPC Sawgrass\",\"image\":{\"path\":\"images\/image-5eabaec199254.jpg#tmp\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":1024,\"height\":570},\"tip\":\"\"},{\"answer\":\"The Old Course at St Andrews, #18\",\"image\":{\"path\":\"images\/image-5eabafb2400f7.jpg#tmp\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":475,\"height\":367},\"tip\":\"\"},{\"answer\":\"Pine Valley Golf Club, #18\",\"image\":{\"path\":\"images\/image-5eabb0ced23c3.jpg#tmp\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":960,\"height\":640},\"tip\":\"\"},{\"answer\":\"Celebrity Course - Indian Wells Golf Resort, #14\",\"image\":{\"path\":\"images\/image-5eabb17c9a715.jpg#tmp\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":780,\"height\":490},\"tip\":\"\"}],\"progressText\":\"Card @card of @total\",\"next\":\"Next\",\"previous\":\"Previous\",\"checkAnswerText\":\"Check\",\"showSolutionsRequiresInput\":true,\"defaultAnswerText\":\"Your answer\",\"correctAnswerText\":\"Correct\",\"incorrectAnswerText\":\"Incorrect\",\"showSolutionText\":\"Correct answer\",\"results\":\"Results\",\"ofCorrect\":\"@score of @total correct\",\"showResults\":\"Show results\",\"answerShortText\":\"A:\",\"retry\":\"Retry\",\"caseSensitive\":false,\"cardAnnouncement\":\"Incorrect answer. Correct answer was @answer\",\"pageAnnouncement\":\"Page @current of @total\",\"description\":\"Match the Hole with the Course\"}",
+ "filtered": "{\"cards\":[{\"answer\":\"7th Hole at Pebble Beach\",\"image\":{\"path\":\"images\/image-5eabad2e71b62.jpg\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":991,\"height\":500},\"tip\":\"
\\nAT&T Pro Am<\/p>\\n\"},{\"answer\":\"12th hole at Augusta National\",\"image\":{\"path\":\"images\/image-5eabae675c197.jpg\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":847,\"height\":467},\"tip\":\"\"},{\"answer\":\"7th hole at TPC Sawgrass\",\"image\":{\"path\":\"images\/image-5eabaec199254.jpg\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":1024,\"height\":570},\"tip\":\"\"},{\"answer\":\"The Old Course at St Andrews, #18\",\"image\":{\"path\":\"images\/image-5eabafb2400f7.jpg\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":475,\"height\":367},\"tip\":\"\"},{\"answer\":\"Pine Valley Golf Club, #18\",\"image\":{\"path\":\"images\/image-5eabb0ced23c3.jpg\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":960,\"height\":640},\"tip\":\"\"},{\"answer\":\"Celebrity Course - Indian Wells Golf Resort, #14\",\"image\":{\"path\":\"images\/image-5eabb17c9a715.jpg\",\"mime\":\"image\/jpeg\",\"copyright\":{\"license\":\"U\"},\"width\":780,\"height\":490},\"tip\":\"\"}],\"progressText\":\"Card @card of @total\",\"next\":\"Next\",\"previous\":\"Previous\",\"checkAnswerText\":\"Check\",\"showSolutionsRequiresInput\":true,\"defaultAnswerText\":\"Your answer\",\"correctAnswerText\":\"Correct\",\"incorrectAnswerText\":\"Incorrect\",\"showSolutionText\":\"Correct answer\",\"results\":\"Results\",\"ofCorrect\":\"@score of @total correct\",\"showResults\":\"Show results\",\"answerShortText\":\"A:\",\"retry\":\"Retry\",\"caseSensitive\":false,\"cardAnnouncement\":\"Incorrect answer. Correct answer was @answer\",\"pageAnnouncement\":\"Page @current of @total\",\"description\":\"Match the Hole with the Course\"}",
+ "slug": "famous-golf-holes",
+ "embed_type": "div",
+ "disable": 9,
+ "content_type": null,
+ "authors": null,
+ "source": null,
+ "year_from": null,
+ "year_to": null,
+ "license": "U",
+ "license_version": null,
+ "license_extras": null,
+ "author_comments": null,
+ "changes": null,
+ "default_language": null
+ },
+ "is_public": false,
+ "created_at": null,
+ "updated_at": null
+ }
+ ],
+ "created_at": null,
+ "updated_at": null
+ }
+}
+```
+
+### HTTP Request
+`GET api/v1/suborganization/{suborganization}/activities/{activity}/search-preview`
+
+#### URL Parameters
+
+Parameter | Status | Description
+--------- | ------- | ------- | -------
+ `suborganization` | required | The Id of a suborganization
+ `activity` | required | The Id of a activity
+
+
+
+
+## Clone Activity
+
+Clone the specified activity of a playlist.
+
+> Example request:
+
+```bash
+curl -X POST \
+ "http://localhost:8000/api/v1/playlists/1/activities/1/clone" \
+ -H "Content-Type: application/json" \
+ -H "Accept: application/json"
+```
+
+```javascript
+const url = new URL(
+ "http://localhost:8000/api/v1/playlists/1/activities/1/clone"
+);
+
+let headers = {
+ "Content-Type": "application/json",
+ "Accept": "application/json",
+};
+
+fetch(url, {
+ method: "POST",
+ headers: headers,
+})
+ .then(response => response.json())
+ .then(json => console.log(json));
+```
+
+```php
+
+$client = new \GuzzleHttp\Client();
+$response = $client->post(
+ 'http://localhost:8000/api/v1/playlists/1/activities/1/clone',
+ [
+ 'headers' => [
+ 'Content-Type' => 'application/json',
+ 'Accept' => 'application/json',
+ ],
+ ]
+);
+$body = $response->getBody();
+print_r(json_decode((string) $body));
+```
+
+```python
+import requests
+import json
+
+url = 'http://localhost:8000/api/v1/playlists/1/activities/1/clone'
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'
+}
+response = requests.request('POST', url, headers=headers)
+response.json()
+```
+
+
+> Example response (200):
+
+```json
+{
+ "message": "Activity is being cloned|duplicated in background!"
+}
+```
+> Example response (400):
+
+```json
+{
+ "errors": [
+ "Not a Public Activity."
+ ]
+}
+```
+> Example response (500):
+
+```json
+{
+ "errors": [
+ "Failed to clone activity."
+ ]
+}
+```
+
+### HTTP Request
+`POST api/v1/playlists/{playlist}/activities/{activity}/clone`
+
+#### URL Parameters
+
+Parameter | Status | Description
+--------- | ------- | ------- | -------
+ `playlist` | required | The Id of a playlist
+ `activity` | required | The Id of a activity
+
+
+
+
+## Upload Activity thumbnail
+
+Upload thumbnail image for a activity
+
+> Example request:
+
+```bash
+curl -X POST \
+ "http://localhost:8000/api/v1/activities/upload-thumb" \
+ -H "Content-Type: application/json" \
+ -H "Accept: application/json" \
+ -d '{"thumb":"(binary)"}'
+
+```
+
+```javascript
+const url = new URL(
+ "http://localhost:8000/api/v1/activities/upload-thumb"
+);
+
+let headers = {
+ "Content-Type": "application/json",
+ "Accept": "application/json",
+};
+
+let body = {
+ "thumb": "(binary)"
+}
+
+fetch(url, {
+ method: "POST",
+ headers: headers,
+ body: body
+})
+ .then(response => response.json())
+ .then(json => console.log(json));
+```
+
+```php
+
+$client = new \GuzzleHttp\Client();
+$response = $client->post(
+ 'http://localhost:8000/api/v1/activities/upload-thumb',
+ [
+ 'headers' => [
+ 'Content-Type' => 'application/json',
+ 'Accept' => 'application/json',
+ ],
+ 'json' => [
+ 'thumb' => '(binary)',
+ ],
+ ]
+);
+$body = $response->getBody();
+print_r(json_decode((string) $body));
+```
+
+```python
+import requests
+import json
+
+url = 'http://localhost:8000/api/v1/activities/upload-thumb'
+payload = {
+ "thumb": "(binary)"
+}
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'
+}
+response = requests.request('POST', url, headers=headers, json=payload)
+response.json()
+```
+
+
+> Example response (200):
+
+```json
+{
+ "thumbUrl": "\/storage\/activities\/1fqwe2f65ewf465qwe46weef5w5eqwq.png"
+}
+```
+> Example response (400):
+
+```json
+{
+ "errors": [
+ "Invalid image."
+ ]
+}
+```
+
+### HTTP Request
+`POST api/v1/activities/upload-thumb`
+
+#### Body Parameters
+Parameter | Type | Status | Description
+--------- | ------- | ------- | ------- | -----------
+ `thumb` | image | required | Thumbnail image to upload
+
+
+
+
+## Share Activity
+
+Share the specified activity.
+
+> Example request:
+
+```bash
+curl -X GET \
+ -G "http://localhost:8000/api/v1/activities/1/share" \
+ -H "Content-Type: application/json" \
+ -H "Accept: application/json"
+```
+
+```javascript
+const url = new URL(
+ "http://localhost:8000/api/v1/activities/1/share"
+);
+
+let headers = {
+ "Content-Type": "application/json",
+ "Accept": "application/json",
+};
+
+fetch(url, {
+ method: "GET",
+ headers: headers,
+})
+ .then(response => response.json())
+ .then(json => console.log(json));
+```
+
+```php
+
+$client = new \GuzzleHttp\Client();
+$response = $client->get(
+ 'http://localhost:8000/api/v1/activities/1/share',
+ [
+ 'headers' => [
+ 'Content-Type' => 'application/json',
+ 'Accept' => 'application/json',
+ ],
+ ]
+);
+$body = $response->getBody();
+print_r(json_decode((string) $body));
+```
+
+```python
+import requests
+import json
+
+url = 'http://localhost:8000/api/v1/activities/1/share'
+headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'
+}
+response = requests.request('GET', url, headers=headers)
+response.json()
+```
+
+
+> Example response (500):
+
+```json
+{
+ "errors": [
+ "Failed to share activity."
+ ]
+}
+```
+> Example response (200):
+
+```json
+{
+ "activity": {
+ "id": 1,
+ "playlist_id": 1,
+ "title": "Science of Golf: Why Balls Have Dimples",
+ "type": "h5p",
+ "content": "",
+ "shared": true,
+ "order": 2,
+ "thumb_url": null,
+ "subject_id": null,
+ "education_level_id": null,
+ "h5p_content": {
+ "id": 59,
+ "user_id": 1,
+ "title": "Science of Golf: Why Balls Have Dimples",
+ "library_id": 40,
+ "parameters": "{\"interactiveVideo\":{\"video\":{\"startScreenOptions\":{\"title\":\"Interactive Video\",\"hideStartTitle\":false},\"textTracks\":{\"videoTrack\":[{\"label\":\"Subtitles\",\"kind\":\"subtitles\",\"srcLang\":\"en\"}]},\"files\":[{\"path\":\"https:\/\/youtu.be\/fcjaxC-e8oY\",\"mime\":\"video\/YouTube\",\"copyright\":{\"license\":\"U\"},\"aspectRatio\":\"16:9\"}]},\"assets\":{\"interactions\":[{\"x\":45.96541786743516,\"y\":42.78350515463918,\"width\":10,\"height\":10,\"duration\":{\"from\":58.33,\"to\":68.33},\"libraryTitle\":\"Single Choice Set\",\"action\":{\"library\":\"H5P.SingleChoiceSet 1.11\",\"params\":{\"choices\":[{\"subContentId\":\"133bca3d-cfe9-442d-a887-8bf1e2ce682a\",\"question\":\"