You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LuticateGroupsDataAccess.php 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace Luticate\Auth\DataAccess;
  3. use Luticate\Auth\DataAccess\Models\LuticateUsers;
  4. use Luticate\Auth\DBO\LuticateUsersLightDbo;
  5. use Luticate\Utils\LuDataAccess;
  6. use Luticate\Auth\DataAccess\Models\LuticateGroups;
  7. use Luticate\Auth\DBO\LuticateGroupsDbo;
  8. use Luticate\Utils\LuMultipleDbo;
  9. class LuticateGroupsDataAccess extends LuDataAccess {
  10. protected static function getModel()
  11. {
  12. return new LuticateGroups();
  13. }
  14. protected static function getOrderBy()
  15. {
  16. return array(array("name", "ASC"));
  17. }
  18. protected static function getQueryPredicate($query)
  19. {
  20. return array(array("name", "ilike", "%" . $query . "%", "or"));
  21. }
  22. /**
  23. * @param $group_name
  24. * @return LuticateGroupsDbo|null
  25. */
  26. public static function getByName($group_name)
  27. {
  28. $group = LuticateGroups::where("name", "=", $group_name)->first();
  29. if (is_null($group))
  30. return null;
  31. return $group->toDbo();
  32. }
  33. public static function getUsers($group_id, $page = 0, $perPage = PHP_INT_MAX, $query = "")
  34. {
  35. $model = LuticateUsers::where("luticate_users.username", "ilike", "%" . $query . "%")
  36. ->where("luticate_users.email", "ilike", "%" . $query . "%", "or")
  37. ->where("luticate_users.firstname", "ilike", "%" . $query . "%", "or")
  38. ->where("luticate_users.lastname", "ilike", "%" . $query . "%", "or")
  39. ->where("luticate_users_groups.group_id", "=", $group_id, "and")
  40. ->join("luticate_users_groups", "luticate_users.id", "=", "luticate_users_groups.user_id");
  41. $count = $model->count();
  42. $model = $model->orderBy("luticate_users.username", "ASC");
  43. $data = $model->take($perPage)->offset($page * $perPage)->get();
  44. $usersLight = [];
  45. foreach ($data as $user) {
  46. if (!is_null($user)) {
  47. $usersLight[] = LuticateUsersLightDbo::fromUserDbo($user->toDbo());
  48. }
  49. }
  50. return new LuMultipleDbo($count, $usersLight);
  51. }
  52. public static function addUser($user_id, $group_id)
  53. {
  54. LuticateGroups::find($group_id)->users()->attach($user_id);
  55. return true;
  56. }
  57. public static function delUser($user_id, $group_id)
  58. {
  59. LuticateGroups::find($group_id)->users()->detach($user_id);
  60. return true;
  61. }
  62. public static function hasUser($user_id, $group_id)
  63. {
  64. return !is_null(LuticateGroups::find($group_id)->users()->find($user_id));
  65. }
  66. }