Example #1
0
    /**
     * 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);
 }