/** * Test get categories */ public function test_get_categories() { global $DB; $this->resetAfterTest(true); $generatedcats = array(); $category1data['idnumber'] = 'idnumbercat1'; $category1data['name'] = 'Category 1 for PHPunit test'; $category1data['description'] = 'Category 1 description'; $category1data['descriptionformat'] = FORMAT_MOODLE; $category1 = self::getDataGenerator()->create_category($category1data); $generatedcats[$category1->id] = $category1; $category2 = self::getDataGenerator()->create_category( array('parent' => $category1->id)); $generatedcats[$category2->id] = $category2; $category6 = self::getDataGenerator()->create_category( array('parent' => $category1->id, 'visible' => 0)); $generatedcats[$category6->id] = $category6; $category3 = self::getDataGenerator()->create_category(); $generatedcats[$category3->id] = $category3; $category4 = self::getDataGenerator()->create_category( array('parent' => $category3->id)); $generatedcats[$category4->id] = $category4; $category5 = self::getDataGenerator()->create_category( array('parent' => $category4->id)); $generatedcats[$category5->id] = $category5; // Set the required capabilities by the external function. $context = context_system::instance(); $roleid = $this->assignUserCapability('moodle/category:manage', $context->id); // Retrieve category1 + sub-categories except not visible ones $categories = core_course_external::get_categories(array( array('key' => 'id', 'value' => $category1->id), array('key' => 'visible', 'value' => 1)), 1); // We need to execute the return values cleaning process to simulate the web service server. $categories = external_api::clean_returnvalue(core_course_external::get_categories_returns(), $categories); // Check we retrieve the good total number of categories. $this->assertEquals(2, count($categories)); // Check the return values foreach ($categories as $category) { $generatedcat = $generatedcats[$category['id']]; $this->assertEquals($category['idnumber'], $generatedcat->idnumber); $this->assertEquals($category['name'], $generatedcat->name); $this->assertEquals($category['description'], $generatedcat->description); $this->assertEquals($category['descriptionformat'], FORMAT_HTML); } // Check different params. $categories = core_course_external::get_categories(array( array('key' => 'id', 'value' => $category1->id), array('key' => 'idnumber', 'value' => $category1->idnumber), array('key' => 'visible', 'value' => 1)), 0); // We need to execute the return values cleaning process to simulate the web service server. $categories = external_api::clean_returnvalue(core_course_external::get_categories_returns(), $categories); $this->assertEquals(1, count($categories)); // Retrieve categories from parent. $categories = core_course_external::get_categories(array( array('key' => 'parent', 'value' => $category3->id)), 1); $this->assertEquals(2, count($categories)); // Retrieve all categories. $categories = core_course_external::get_categories(); // We need to execute the return values cleaning process to simulate the web service server. $categories = external_api::clean_returnvalue(core_course_external::get_categories_returns(), $categories); $this->assertEquals($DB->count_records('course_categories'), count($categories)); // Call without required capability (it will fail cause of the search on idnumber). $this->unassignUserCapability('moodle/category:manage', $context->id, $roleid); $this->setExpectedException('moodle_exception'); $categories = core_course_external::get_categories(array( array('key' => 'id', 'value' => $category1->id), array('key' => 'idnumber', 'value' => $category1->idnumber), array('key' => 'visible', 'value' => 1)), 0); }
public static function __fetchCompleteUserData($userid, $from) { global $DB; $serverTime = time(); $courses = core_enrol_external::get_users_courses_subcat_offline($userid, self::COURSE_CATEGORY_ID); $course_enrols = "SELECT courseid, timemodified FROM (\n\t\t\tSELECT ue.id, userid, courseid, ue.timemodified FROM mdl_enrol e \n\t\t\tJOIN mdl_user_enrolments ue ON e.id = ue.enrolid\n\t\t\tWHERE ue.userid = ? ORDER BY timemodified DESC) tmp\n\t\t\tGROUP BY userid, courseid"; $user_cohort_course = $DB->get_records_sql($course_enrols, array($userid)); $userData = array(); $topics = array(); $modules = array(); $quizDelta = array(); $players = array(); $course_module_dependencies = array(); $activeCourses = array(); foreach ($courses as $i => $course) { $moduleIds = array(); //@TODO performance - courses could have skipped when fetching from db itself rather than skipping it when iterating. $timemodified = $course['timemodified'] > $user_cohort_course[$course['id']]->timemodified ? $course['timemodified'] : $user_cohort_course[$course['id']]->timemodified; $isnewenrol = !empty($from) && $user_cohort_course[$course['id']]->timemodified > $from; if (!empty($from) && $timemodified < $from) { unset($courses[$i]); } $fromtimestamp = !empty($isnewenrol) ? null : $from; try { $topicsWithModules = core_course_external::get_course_contents($course['id'], array(), $fromtimestamp); $topics = array_merge($topics, self::extractTopics($course['id'], $topicsWithModules, $fromtimestamp)); foreach ($topicsWithModules as $topicWithModule) { if (isset($topicWithModule['modules']) && is_array($topicWithModule['modules'])) { $modules = array_merge($modules, self::extractModules($course['id'], $topicWithModule['id'], $topicWithModule['modules'], $userid, $fromtimestamp)); $moduleIds = array_merge($moduleIds, self::extractModuleIds($course['id'], $topicWithModule['id'], $topicWithModule['modules'], $userid, $fromtimestamp)); $quizDelta = array_merge($quizDelta, self::extractQuizDeltaSync($course['id'], $topicWithModule['id'], $topicWithModule['modules'], $userid)); } } $cID = $course['id']; $activecourse_mod = $moduleIds; $activeCourses[] = array("id" => $cID, "modules" => $activecourse_mod); $player = PlayersPercent::__analysePercentage($course['id'], $userid, true); $player = array_merge(array('courseid' => $course['id']), $player); $players[] = $player; $module_hierarchy = self::getModuleIdsByDependency($course['id']); if (!empty($module_hierarchy)) { $course_module_dependencies = array_merge($course_module_dependencies, $module_hierarchy); } } catch (Exception $ex) { } } $courses = array_values($courses); $userData = new stdClass(); $userData->user = self::getProfileDetails($userid); $userData->user_cohorts = self::getUserCohorts($userid); $userData->activeCourses = array_merge($activeCourses, self::getActiveCids($userid, $from)); $userData->course_categories = core_course_external::get_categories(); $userData->courses = $courses; $userData->topics = $topics; $userData->modules = $modules; $userData->module_dependencies = $course_module_dependencies; $userData->completed_modules = self::getCompletedModuleIds($userid); $userData->bookmarks = self::getBookmarks($userid); $userData->notes = self::getNotes($userid, $from); $userData->progress = ProgressPercent::__analyseProgressPercentage($userid, true); $userData->players = $players; $userData->favorites = Favorite::fetchAll($userid, true); $userData->badges = BadgeDisplay::__DisplayBadges($userid, 'getBadges', null, true); $userData->news = self::_NewsData($userid, $from); $userData->resources = self::_ResourcesData($userid, $from); $userData->quizsync = $quizDelta; $userData->server_time = $serverTime; $userData->contentsize = self::getContentSize($from, $courses, $modules); $response = new CliniqueServiceResponce(); $response->response(false, null, $userData); }