Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

LuticateGroupsDataAccess.php 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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 getOtherUsers($group_id, $page = 0, $perPage = PHP_INT_MAX, $query = "")
  53. {
  54. $model = LuticateUsers::where("luticate_users.id", "IS", "NULL")
  55. ->leftJoin("luticate_users_groups", function($join) use ($group_id)
  56. {
  57. $join->on("luticate_users.id", "=", "luticate_users_groups.user_id")
  58. ->on("luticate_users_groups.group_id", "=", $group_id);
  59. });
  60. $count = $model->count();
  61. $model = $model->orderBy("luticate_users.username", "ASC");
  62. $data = $model->take($perPage)->offset($page * $perPage)->get();
  63. $usersLight = [];
  64. foreach ($data as $user) {
  65. if (!is_null($user)) {
  66. $usersLight[] = LuticateUsersLightDbo::fromUserDbo($user->toDbo());
  67. }
  68. }
  69. return new LuMultipleDbo($count, $usersLight);
  70. }
  71. public static function addUser($user_id, $group_id)
  72. {
  73. LuticateGroups::find($group_id)->users()->attach($user_id);
  74. return true;
  75. }
  76. public static function delUser($user_id, $group_id)
  77. {
  78. LuticateGroups::find($group_id)->users()->detach($user_id);
  79. return true;
  80. }
  81. public static function hasUser($user_id, $group_id)
  82. {
  83. return !is_null(LuticateGroups::find($group_id)->users()->find($user_id));
  84. }
  85. }