Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 37 additions & 4 deletions lbplanner/classes/helpers/user_helper.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,12 @@

namespace local_lbplanner\helpers;

use core\context\system as context_system;
use dml_exception;
use moodle_exception;
use stdClass;
use core_user;

use local_lbplanner\enums\CAPABILITY;
use local_lbplanner\enums\NOTIF_TRIGGER;
use local_lbplanner\enums\PLAN_ACCESS_TYPE;
use local_lbplanner\model\user;

/**
Expand All @@ -40,6 +39,12 @@ class user_helper {
*/
const LB_PLANNER_USER_TABLE = 'local_lbplanner_users';

/**
* Name of the moodle's database
* WARNING: DO NOT USE UNLESS ABSOLUTELY NECESSARY!
*/
const MOODLE_USER_TABLE = 'user';

/**
* Checks if the given user exists in the LB_PLANNER_USER database.
*
Expand All @@ -55,6 +60,7 @@ public static function check_user_exists(int $userid): bool {

/**
* Retrieves the user with the given id.
* If user doesn't exist in the DB yet, it will be created.
*
* @param int $userid The id of the user to retrieve.
*
Expand All @@ -63,7 +69,34 @@ public static function check_user_exists(int $userid): bool {
*/
public static function get_user(int $userid): user {
global $DB;
return user::from_db($DB->get_record(self::LB_PLANNER_USER_TABLE, ['userid' => $userid], '*', MUST_EXIST));
$dbuser = $DB->get_record(self::LB_PLANNER_USER_TABLE, ['userid' => $userid]);

if ($dbuser !== false) {
return user::from_db($dbuser);
}

// Register user if not found.
$lbplanneruser = new user(0, $userid, 'default', 'none', 1, false);
$lbpid = $DB->insert_record(self::LB_PLANNER_USER_TABLE, $lbplanneruser->prepare_for_db());
$lbplanneruser->set_fresh($lbpid);

// Create empty plan for newly registered user.
$plan = new \stdClass();
$plan->name = 'Plan for ' . ($lbplanneruser->get_mdluser()->username);
$planid = $DB->insert_record(plan_helper::TABLE, $plan);
$lbplanneruser->set_planid($planid);

// Set user as owner of new plan.
$planaccess = new \stdClass();
$planaccess->userid = $userid;
$planaccess->accesstype = PLAN_ACCESS_TYPE::OWNER;
$planaccess->planid = $planid;
$DB->insert_record(plan_helper::ACCESS_TABLE, $planaccess);

// Notify the FE that this user likely hasn't used LBP before.
notifications_helper::notify_user($userid, -1, NOTIF_TRIGGER::USER_REGISTERED);

return $lbplanneruser;
}

/**
Expand Down
23 changes: 18 additions & 5 deletions lbplanner/services/user/get_all_users.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,15 @@
use dml_exception;
use core_external\{external_api, external_function_parameters, external_multiple_structure, external_value};
use invalid_parameter_exception;
use local_lbplanner\enums\CAPABILITY;
use moodle_exception;
use core\context\system as context_system;

use local_lbplanner\helpers\user_helper;
use local_lbplanner\model\user;

/**
* Gets all users registered by the lbplanner app.
* Gets all users with one or several LBP capabilities.
*
* @package local_lbplanner
* @subpackage services_user
Expand All @@ -44,7 +46,7 @@ public static function get_all_users_parameters(): external_function_parameters
}

/**
* Gives back all users registered by the lbplanner app.
* Gives back all users.
* @param ?string $vintage (optional) gives back all users with the given vintage
* @throws moodle_exception
* @throws dml_exception
Expand All @@ -55,12 +57,23 @@ public static function get_all_users(?string $vintage): array {

self::validate_parameters(self::get_all_users_parameters(), ['vintage' => $vintage]);

$users = $DB->get_records(user_helper::LB_PLANNER_USER_TABLE);
$syscontext = context_system::instance();

$alluserids = $DB->get_fieldset(user_helper::MOODLE_USER_TABLE, 'id');

$results = [];

foreach ($users as $userdata) {
$user = user::from_db($userdata);
foreach ($alluserids as $userid) {
$user = null;
foreach (CAPABILITY::cases() as $case) {
if (has_capability($case->value, $syscontext, $userid)) {
$user = user_helper::get_user($userid);
break;
}
}
if ($user === null) {
continue;
}
if ($vintage === null || $vintage == $user->get_mdluser()->vintage) {
array_push($results, $user->prepare_for_api_short());
}
Expand Down
35 changes: 4 additions & 31 deletions lbplanner/services/user/get_user.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,10 @@

use coding_exception;
use dml_exception;
use core_external\{external_function_parameters, external_single_structure, external_value};
use core_external\{external_function_parameters, external_single_structure};
use moodle_exception;

use local_lbplanner\helpers\{user_helper, plan_helper, notifications_helper};
use local_lbplanner\enums\{PLAN_ACCESS_TYPE, NOTIF_TRIGGER};
use local_lbplanner\helpers\user_helper;
use local_lbplanner\model\user;

/**
Expand Down Expand Up @@ -52,35 +51,9 @@ public static function get_user_parameters(): external_function_parameters {
* @return array The data of the user
*/
public static function get_user(): array {
global $USER, $DB;
global $USER;

// Checks if the user is enrolled in LB Planner.
if (!user_helper::check_user_exists($USER->id)) {
// Register user if not found.
$lbplanneruser = new user(0, $USER->id, 'default', 'none', 1, false);
$lbpid = $DB->insert_record(user_helper::LB_PLANNER_USER_TABLE, $lbplanneruser->prepare_for_db());
$lbplanneruser->set_fresh($lbpid);

// Create empty plan for newly registered user.
$plan = new \stdClass();
$plan->name = 'Plan for ' . $USER->username;
$planid = $DB->insert_record(plan_helper::TABLE, $plan);
$lbplanneruser->set_planid($planid);

// Set user as owner of new plan.
$planaccess = new \stdClass();
$planaccess->userid = $USER->id;
$planaccess->accesstype = PLAN_ACCESS_TYPE::OWNER;
$planaccess->planid = $planid;
$DB->insert_record(plan_helper::ACCESS_TABLE, $planaccess);

// Notify the FE that this user likely hasn't used LBP before.
notifications_helper::notify_user($USER->id, -1, NOTIF_TRIGGER::USER_REGISTERED);
} else {
$lbplanneruser = user_helper::get_user($USER->id);
}

return $lbplanneruser->prepare_for_api();
return user_helper::get_user($USER->id)->prepare_for_api();
}

/**
Expand Down
Loading