Skip to content

Commit bd0c73c

Browse files
author
Mohamad Murad
committed
add behaviors
1 parent e98c8ae commit bd0c73c

File tree

60 files changed

+2634
-200
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+2634
-200
lines changed

app/Events/NewBehaviorAdded.php

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
3+
namespace App\Events;
4+
5+
6+
use App\Models\RewardBadge;
7+
use App\Models\RewardPoint;
8+
use App\Models\StudentBehavior;
9+
use Illuminate\Broadcasting\Channel;
10+
use Illuminate\Broadcasting\InteractsWithSockets;
11+
use Illuminate\Broadcasting\PresenceChannel;
12+
use Illuminate\Broadcasting\PrivateChannel;
13+
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
14+
use Illuminate\Foundation\Events\Dispatchable;
15+
use Illuminate\Queue\SerializesModels;
16+
17+
class NewBehaviorAdded extends baseEvent
18+
{
19+
use Dispatchable, InteractsWithSockets, SerializesModels;
20+
21+
/**
22+
* Create a new event instance.
23+
*
24+
* @return void
25+
*/
26+
public function __construct(StudentBehavior $studentBehavior)
27+
{
28+
$subject = $studentBehavior->subject;
29+
$behavior = $studentBehavior->behavior;
30+
$student = $studentBehavior->student;
31+
$badgesBehaviors = $behavior->badges()->where('subject_id',$subject->id)->get();
32+
foreach ($badgesBehaviors as $badgesBehavior){
33+
RewardBadge::create([
34+
'user_id' => $student->id,
35+
'badge_id' => $badgesBehavior->badge->id,
36+
'subject_id' => $subject->id,
37+
]);
38+
}
39+
40+
$points = $behavior->behaviorPoints()->where('subject_id',$subject->id)->get();
41+
foreach ($points as $point){
42+
43+
RewardPoint::create([
44+
'point_id' => $point->id,
45+
'student_id' => $student->id,
46+
'subject_id' => $subject->id,
47+
]);
48+
}
49+
50+
51+
}
52+
53+
/**
54+
* Get the channels the event should broadcast on.
55+
*
56+
* @return \Illuminate\Broadcasting\Channel|array
57+
*/
58+
public function broadcastOn()
59+
{
60+
return new PrivateChannel('channel-name');
61+
}
62+
}

app/Events/baseEvent.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,22 @@ public function pointSession($msg){
1818
}
1919

2020

21+
public function rewardPoints($user,$points,$subject_id){
22+
23+
foreach ($points as $point) {
24+
25+
$user->rewardPoints()->UpdateOrCreate([
26+
'point_id' => $point->id,
27+
'subject_id'=> $subject_id
28+
], [
29+
'point_id' => $point->id,
30+
'count' => $point->count,
31+
'subject_id'=> $subject_id
32+
]);
33+
34+
$this->pointSession('You are Reward ' . $point->count . ' Points');
35+
}
36+
}
37+
38+
2139
}

app/Events/enroll_subject.php

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,9 @@ class enroll_subject extends baseEvent
2424
public function __construct($user, $subject)
2525
{
2626
$enroll_subject = Behavior::where('name', 'enroll_subject')->first();
27-
//$pointsCount = $subject->points ? $subject->points->count : null;
28-
$points = $enroll_subject->subject_points($subject->id);
29-
30-
foreach ($points as $point) {
31-
32-
$user->rewardPoints()->UpdateOrCreate([
33-
'points_behaviors_id' => $point->pivot->id,
34-
], [
35-
'points_behaviors_id' => $point->pivot->id,
36-
'count' => $point->count,
37-
]);
38-
39-
$this->pointSession('You are Reward ' . $point->count . ' Points');
40-
}
41-
4227

28+
$points = $enroll_subject->subject_points($subject->id);
29+
$this->rewardPoints($user, $points,$subject->id);
4330
// event(new BadgeGift($subject, 'enroll_subject'));
4431
}
4532

app/Events/objective_complete.php

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,14 @@ public function __construct(User $user,Objective $objective,Subject $subject)
2727
{
2828
$objective_complete = Behavior::where('name', 'objective_complete')->first();
2929
$points = $objective_complete->objective_points($objective->id);
30-
foreach ($points as $point) {
31-
32-
$user->rewardPoints()->UpdateOrCreate([
33-
'points_behaviors_id' => $point->pivot->id,
34-
], [
35-
'points_behaviors_id' => $point->pivot->id,
36-
'count' => $point->count,
37-
]);
38-
39-
$this->pointSession('You are Reward ' . $point->count . ' Points');
40-
}
30+
$this->rewardPoints($user,$points,$subject->id);
4131

4232
// event(new changeLevel($subject));
4333

4434
}
4535

36+
37+
4638
/**
4739
* Get the channels the event should broadcast on.
4840
*
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Models\Badge;
6+
use App\Models\BadgeBehavior;
7+
use App\Models\Behavior;
8+
use App\Models\Subject;
9+
use Illuminate\Contracts\Foundation\Application;
10+
use Illuminate\Contracts\View\Factory;
11+
use Illuminate\Contracts\View\View;
12+
use Illuminate\Http\Request;
13+
use Illuminate\Support\Facades\Auth;
14+
15+
class BadgeBehaviorController extends Controller
16+
{
17+
/**
18+
* Display a listing of the resource.
19+
*
20+
* @return Factory|Application|View
21+
*/
22+
public function index()
23+
{
24+
if (Auth::user()->hasRole('Admin')) {
25+
$badges = BadgeBehavior::with(['subject', 'badge', 'behavior'])->get();
26+
} else {
27+
28+
$subjects = Subject::where('creator_id', Auth::id())->with('creator')->pluck('id');
29+
30+
$badges = BadgeBehavior::whereIn('subject_id', $subjects)->with(['subject', 'badge', 'behavior'])->get();
31+
32+
}
33+
return view('backend.badgeBehaviors.index', compact('badges'));
34+
}
35+
36+
/**
37+
* Show the form for creating a new resource.
38+
*
39+
* @return Application|Factory|View
40+
*/
41+
public function create()
42+
{
43+
$behaviors = Behavior::all();
44+
$badges = Badge::all();
45+
46+
if (Auth::user()->hasRole('Admin')) {
47+
$subjects = Subject::with('creator')->get();
48+
} else {
49+
50+
$subjects = Subject::where('creator_id', Auth::id())->with('creator')->get();
51+
}
52+
return view('backend.badgeBehaviors.create', compact('badges', 'behaviors', 'subjects'));
53+
54+
}
55+
56+
/**
57+
* Store a newly created resource in storage.
58+
*
59+
* @param \Illuminate\Http\Request $request
60+
* @return \Illuminate\Http\RedirectResponse
61+
*/
62+
public function store(Request $request)
63+
{
64+
$this->validate($request, [
65+
'subject_id' => 'required',
66+
'rule_id' => 'required',
67+
'badge_id' => 'required',
68+
]);
69+
70+
try {
71+
BadgeBehavior::create([
72+
'subject_id' => $request->get('subject_id'),
73+
'behavior_id' => $request->get('rule_id'),
74+
'badge_id' => $request->get('badge_id'),
75+
]);
76+
} catch (\Exception $e) {
77+
return redirect()->route('backend.badgeBehaviors.index')->with('error', $e->getMessage());
78+
}
79+
80+
81+
return redirect()->route('backend.badgeBehaviors.index');
82+
}
83+
84+
/**
85+
* Display the specified resource.
86+
*
87+
* @param BadgeBehavior $badgeBehavior
88+
* @return \Illuminate\Http\Response
89+
*/
90+
public function show(BadgeBehavior $badgeBehavior)
91+
{
92+
//
93+
}
94+
95+
/**
96+
* Show the form for editing the specified resource.
97+
*
98+
* @param BadgeBehavior $badgeBehavior
99+
* @return Factory|Application|View
100+
*/
101+
public function edit(BadgeBehavior $badgeBehavior)
102+
{
103+
$behaviors = Behavior::all();
104+
$badges = Badge::all();
105+
106+
if (Auth::user()->hasRole('Admin')) {
107+
$subjects = Subject::with('creator')->get();
108+
} else {
109+
$subjects = Subject::where('creator_id', Auth::id())->with('creator')->get();
110+
}
111+
return view('backend.badgeBehaviors.edit', compact('badges', 'badgeBehavior', 'behaviors', 'subjects'));
112+
113+
}
114+
115+
/**
116+
* Update the specified resource in storage.
117+
*
118+
* @param \Illuminate\Http\Request $request
119+
* @param BadgeBehavior $badgeBehavior
120+
* @return \Illuminate\Http\RedirectResponse
121+
*/
122+
public function update(Request $request, BadgeBehavior $badgeBehavior)
123+
{
124+
125+
$this->validate($request, [
126+
'subject_id' => 'required',
127+
'rule_id' => 'required',
128+
'badge_id' => 'required',
129+
]);
130+
131+
try {
132+
$badgeBehavior->update([
133+
'subject_id' => $request->get('subject_id'),
134+
'behavior_id' => $request->get('rule_id'),
135+
'badge_id' => $request->get('badge_id'),
136+
]);
137+
} catch (\Exception $e) {
138+
return redirect()->route('backend.badgeBehaviors.index')->with('error', $e->getMessage());
139+
}
140+
141+
142+
return redirect()->route('backend.badgeBehaviors.index');
143+
}
144+
145+
/**
146+
* Remove the specified resource from storage.
147+
*
148+
* @param BadgeBehavior $badgeBehavior
149+
* @return \Illuminate\Http\RedirectResponse
150+
*/
151+
public function destroy(BadgeBehavior $badgeBehavior)
152+
{
153+
$badgeBehavior->delete();
154+
return redirect()->route('backend.badgeBehaviors.index');
155+
}
156+
}

app/Http/Controllers/BehaviorController.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,14 @@
22

33
namespace App\Http\Controllers;
44

5+
use App\Events\NewBehaviorAdded;
56
use App\Models\Behavior;
67
use App\Models\Rules;
8+
use App\Models\StudentBehavior;
9+
use App\Models\Subject;
710
use Illuminate\Http\Request;
11+
use Illuminate\Support\Facades\Auth;
12+
use Illuminate\Support\Facades\Session;
813

914
class BehaviorController extends Controller
1015
{
@@ -98,4 +103,37 @@ public function destroy(Behavior $behavior)
98103
$behavior->delete();
99104
return redirect()->back();
100105
}
106+
107+
108+
public function addBehaviorToStudent(Request $request)
109+
{
110+
$this->validate($request, [
111+
'student_id' => 'required|exists:users,id',
112+
'subject_id' => 'required|exists:subjects,id',
113+
'rule_id' => 'required|exists:behaviors,id',
114+
]);
115+
116+
$subject = Subject::where('creator_id', Auth::id())->where('id', $request->get('subject_id'))->first();
117+
if (!$subject) {
118+
Session::flash('error', 'Subject Not found');
119+
return redirect()->back();
120+
}
121+
122+
$student = $subject->enrolledStudents()->where('users.id', $request->get('student_id'))->first();
123+
if (!$student) {
124+
Session::flash('error', 'Student Not found');
125+
return redirect()->back();
126+
}
127+
128+
129+
$behavior = StudentBehavior::create([
130+
'user_id' => $request->get('student_id'),
131+
'behavior_id' => $request->get('rule_id'),
132+
'subject_id' => $request->get('subject_id'),
133+
]);
134+
135+
136+
event(new NewBehaviorAdded($behavior));
137+
return redirect()->back();
138+
}
101139
}

app/Http/Controllers/EnrollController.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use App\Events\enroll_subject;
66

77
use App\Events\objective_complete;
8+
use App\Models\Level;
89
use App\Models\Objective;
910
use App\Models\Subject;
1011
use Illuminate\Support\Facades\Auth;
@@ -23,7 +24,7 @@ public function enroll(Subject $subject){
2324
if (!$enroll){
2425
// new enroll
2526
$user->enrolledSubject()->attach($subject->id,[
26-
//'level_id' => Levels::all()->first()->id,
27+
'level_id' => Level::all()->first()->id,
2728
]);
2829

2930

0 commit comments

Comments
 (0)