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

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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_groups.group_id", "=", $group_id);
  36. if (!is_null($query) && $query != "") {
  37. $model->where("luticate_users.username", "ilike", "%" . $query . "%")
  38. ->where("luticate_users.email", "ilike", "%" . $query . "%")
  39. ->where("luticate_users.firstname", "ilike", "%" . $query . "%")
  40. ->where("luticate_users.lastname", "ilike", "%" . $query . "%");
  41. }
  42. $model->join("luticate_users_groups", "luticate_users.id", "=", "luticate_users_groups.user_id");
  43. $count = $model->count();
  44. $model = $model->orderBy("luticate_users.username", "ASC");
  45. $data = $model->take($perPage)->offset($page * $perPage)->get();
  46. $usersLight = [];
  47. foreach ($data as $user) {
  48. if (!is_null($user)) {
  49. $usersLight[] = LuticateUsersLightDbo::fromUserDbo($user->toDbo());
  50. }
  51. }
  52. return new LuMultipleDbo($count, $usersLight);
  53. }
  54. public static function addUser($user_id, $group_id)
  55. {
  56. LuticateGroups::find($group_id)->users()->attach($user_id);
  57. return true;
  58. }
  59. public static function delUser($user_id, $group_id)
  60. {
  61. LuticateGroups::find($group_id)->users()->detach($user_id);
  62. return true;
  63. }
  64. public static function hasUser($user_id, $group_id)
  65. {
  66. return !is_null(LuticateGroups::find($group_id)->users()->find($user_id));
  67. }
  68. }