Skip to content

Commit 5374703

Browse files
authored
Merge pull request #8 from jsalzano92/posts
Admin members list, promote/demote/remove and other.
2 parents 0580e17 + e4e4628 commit 5374703

File tree

11 files changed

+279
-22
lines changed

11 files changed

+279
-22
lines changed

app/Http/Controllers/ProjectController.php

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
namespace SoftwareHerd\Http\Controllers;
33

44
use SoftwareHerd\Project;
5+
use SoftwareHerd\User_Projects;
6+
use SoftwareHerd\User_Project_Requests;
57
use Illuminate\Http\Request;
68

79
class ProjectController extends Controller
@@ -18,7 +20,27 @@ public function projectCreateProject(request $request)
1820
$project->get_involved_pitch = $request['get_involved_pitch'];
1921
$project->project_admin_user_id = $request->user()->id;
2022
$request->user()->projects()->save($project);
21-
return view('home');
23+
24+
$connection = new User_Projects();
25+
$connection->user_id = $request->user()->id;
26+
$connection->project_id = $project->id;
27+
$connection->user_name = $request->user()->name;
28+
$connection->project_name = $project->title;
29+
$connection->level = 3;
30+
$connection->save();
31+
return redirect('/project/'.$project->id);
32+
}
33+
34+
public function pushRequest(request $request)
35+
{
36+
$connection = new User_Project_Requests();
37+
$connection->user_id = $request->user()->id;
38+
$connection->project_id = $request['project_id'];
39+
$connection->user_name = $request->user()->name;
40+
$connection->project_name = $request['project_name'];
41+
$connection->reason = $request['reason'];
42+
$connection->save();
43+
return redirect('/project/'.$request['project_id']);
2244
}
2345

2446
public function project($id) {
@@ -37,4 +59,54 @@ public function admin($id) {
3759
return redirect('/project_library');
3860
return view('project_admin', array('project' => $project));
3961
}
62+
63+
public function promote(request $request) {
64+
$level = \DB::table('user_projects')->where('user_id', $request['user'])->where('project_id', $request['project'])->value('level');
65+
$level = $level + 1;
66+
\DB::table('user_projects')->where('user_id', $request['user'])
67+
->where('project_id', $request['project'])
68+
->update(['level' => $level]);
69+
70+
return redirect('/project_admin/'.$request['project']);
71+
}
72+
public function demote(request $request) {
73+
$level = \DB::table('user_projects')->where('user_id', $request['user'])->where('project_id', $request['project'])->value('level');
74+
$level = $level - 1;
75+
\DB::table('user_projects')->where('user_id', $request['user'])
76+
->where('project_id', $request['project'])
77+
->update(['level' => $level]);
78+
79+
return redirect('/project_admin/'.$request['project']);
80+
}
81+
82+
public function removeMember(request $request) {
83+
\DB::table('user_projects')->where('user_id', $request['user'])
84+
->where('project_id', $request['project'])
85+
->delete();
86+
87+
return redirect('/project_admin/'.$request['project']);
88+
}
89+
90+
public function acceptMember(request $request) {
91+
$result = \DB::table('user_project_requests')->where('user_id', $request['user'])
92+
->where('project_id', $request['project'])->first();
93+
94+
$connection = new User_Projects();
95+
$connection->user_id = $result->user_id;
96+
$connection->project_id = $result->project_id;
97+
$connection->user_name = $result->user_name;
98+
$connection->project_name = $result->project_name;
99+
$connection->level = 0;
100+
$connection->save();
101+
102+
\DB::table('user_project_requests')->where('user_id', $request['user'])
103+
->where('project_id', $request['project'])->delete();
104+
return redirect('/project_admin/'.$request['project']);
105+
}
106+
107+
public function declineMember(request $request) {
108+
\DB::table('user_project_requests')->where('user_id', $request['user'])
109+
->where('project_id', $request['project'])->delete();
110+
return redirect('/project_admin/'.$request['project']);
111+
}
40112
}

app/Policies/ProjectPolicy.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@ class ProjectPolicy
1010
{
1111
use HandlesAuthorization;
1212

13+
public function member(User $user, Project $project)
14+
{
15+
$user_projects = \DB::table('user_projects')->where('project_id', $project->id)->where('user_id', $user->id)->first();
16+
if(!$user_projects)
17+
return false;
18+
else
19+
return true;
20+
}
21+
1322
public function admin(User $user, Project $project)
1423
{
1524
$user_projects = \DB::table('user_projects')->where('project_id', $project->id)->where('user_id', $user->id)->first();

app/Project.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class Project extends Model
1010

1111
public function user()
1212
{
13-
return $this->hasMany('SoftwareHerd\User');
13+
return $this->belongsTo('SoftwareHerd\User', 'project_admin_user_id');
1414
}
1515

1616
public function posts()

app/User.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class User extends Authenticatable
1111

1212
public function projects()
1313
{
14-
return $this->hasMany('SoftwareHerd\Project');
14+
return $this->hasMany('SoftwareHerd\Project', 'project_admin_user_id');
1515
}
1616

1717
public function comments()

app/User_Project_Requests.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
namespace SoftwareHerd;
4+
5+
use Illuminate\Database\Eloquent\Model;
6+
7+
class User_Project_Requests extends Model
8+
{
9+
//
10+
protected $table = 'user_project_requests';
11+
public $timestamps = false;
12+
}

app/User_Projects.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ class User_Projects extends Model
88
{
99
//
1010
protected $table = 'user_projects';
11-
11+
public $timestamps = false;
1212
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
use Illuminate\Support\Facades\Schema;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Database\Migrations\Migration;
6+
7+
class MakeUserProjectRequestsTable extends Migration
8+
{
9+
/**
10+
* Run the migrations.
11+
*
12+
* @return void
13+
*/
14+
public function up()
15+
{
16+
Schema::create('user_project_requests', function (Blueprint $table) {
17+
$table->integer('user_id');
18+
$table->integer('project_id');
19+
$table->string('user_name', 255);
20+
$table->string('project_name', 255);
21+
$table->string('reason', 255);
22+
});
23+
24+
Schema::table('user_project_requests', function ($table) {
25+
$table->index('user_id', 'index_for_requests');
26+
});
27+
}
28+
29+
/**
30+
* Reverse the migrations.
31+
*
32+
* @return void
33+
*/
34+
public function down()
35+
{
36+
Schema::drop('user_project_requests');
37+
}
38+
}

resources/views/project.blade.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,16 @@
2828

2929
@include('news_list')
3030

31+
@if(Auth::user())
32+
@if(Auth::user()->can('member', $project))
33+
<h4>You are a member of this project</h4>
34+
@else
35+
@include('project_request')
36+
@endif
37+
@else
38+
Please <a href="{{ url('/login') }}">login</a> if you want to join a project.
39+
@endif
40+
3141
<h3>
3242
@can('admin', $project)
3343
<a href="/project_admin/{{$project->id}}">Project Administration</a>

resources/views/project_admin.blade.php

Lines changed: 108 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,113 @@
55
@endsection
66

77
@section('content')
8-
<script type="text/javascript" src="{{ asset('/js/tinymce/tinymce.min.js') }}"></script>
9-
<script type="text/javascript">
10-
tinymce.init({
11-
selector : "#new-post-info",
12-
});
13-
</script>
8+
<div style="margin-bottom:20px">
9+
<button onClick="$('#admin_new_post').hide();$('#admin_manage_members').hide();$('#admin_manage_info').slideDown();">Manage Project</button>
10+
<button onClick="$('#admin_new_post').hide();$('#admin_manage_info').hide();$('#admin_manage_members').slideDown();">Manage Members</button>
11+
<button onClick="$('#admin_manage_info').hide();$('#admin_manage_members').hide();$('#admin_new_post').slideDown();">New News Post</button>
12+
</div>
13+
14+
<div id="admin_manage_info" style="display: none;">
15+
<div class="well">More to come!</div>
16+
</div>
1417

15-
<form action="/write_post/{{ $project->id }}" method="post">
16-
<div class="form-group">
17-
<textarea class="form-control" name="title" id="new-post" rows="1" placeholder="Your Post's Title"></textarea>
18-
<textarea class="form-control" name="summary" id="new-post" rows="2" placeholder="Your Post's Summary or Short Description"></textarea>
19-
<textarea name="info" id="new-post-info" rows="20"></textarea>
20-
</div>
21-
<button type="submit" class="btn btn-primary">Create Post</button>
22-
<input type="hidden" value="{{ Session::token() }}" name="_token">
23-
{{ csrf_field() }}
24-
</form>
18+
19+
<div id="admin_manage_members" style="display: none;">
20+
<div class="panel panel-default" style="padding: 10px; width:350px; height:430px; float:left; margin-right:50px;">
21+
<div class="panel-heading"><h4 class="panel-title">Members List</h4></div>
22+
<div style="overflow-y: scroll; width:330px; height:370px">
23+
<table class="table table-hover table-striped">
24+
<?php
25+
$users = \DB::select('select * from user_projects where project_id = :id', ['id' => $project->id]);
26+
?>
27+
@foreach($users as $user)
28+
<tr>
29+
<td style="width:50%">{{$user->user_name}}</td>
30+
<td style="width:25%">
31+
@if($user->level == 0)
32+
Member
33+
@elseif($user->level == 1)
34+
Admin
35+
@elseif($user->level == 2)
36+
Leader
37+
@elseif($user->level == 3)
38+
Creator
39+
@else
40+
{{$user->level}}
41+
@endif
42+
</td>
43+
<td style="width:25%">
44+
<button onClick="$('#admin_{{$user->user_id}}_form').attr('action', '/promote');
45+
$('#admin_{{$user->user_id}}_form').submit();">P</button>
46+
<button onClick="$('#admin_{{$user->user_id}}_form').attr('action', '/demote');
47+
$('#admin_{{$user->user_id}}_form').submit();">D</button>
48+
@if($user->user_id != Auth::user()->id)
49+
<button onClick="$('#admin_{{$user->user_id}}_form').attr('action', '/remove');
50+
$('#admin_{{$user->user_id}}_form').submit();">X</button>
51+
@endif
52+
<form id="admin_{{$user->user_id}}_form" style="width:0px; height:0px" action="/promote" method="post">
53+
<input type="hidden" value="{{ $user->user_id }}" name="user"></input>
54+
<input type="hidden" value="{{ $user->project_id }}" name="project"></input>
55+
<input type="hidden" value="{{ Session::token() }}" name="_token">
56+
{{ csrf_field() }}
57+
</form>
58+
</td>
59+
</tr>
60+
@endforeach
61+
</table>
62+
</div>
63+
</div>
64+
65+
<div class="panel panel-default" style="padding: 10px; width:350px; height:430px; float:left;">
66+
<div class="panel-heading"><h4 class="panel-title">Request List</h4></div>
67+
<div style="overflow-y: scroll; width:330px; height:370px">
68+
<table class="table table-hover table-striped">
69+
<?php
70+
$users = \DB::select('select * from user_project_requests where project_id = :id', ['id' => $project->id]);
71+
?>
72+
@foreach($users as $user)
73+
<tr>
74+
<td style="width:50%">{{$user->user_name}}</td>
75+
<td style="width:40%">{{$user->reason}}</td>
76+
<td style="width:10%">
77+
<button onClick="$('#admin_{{$user->user_id}}_form').attr('action', '/acceptMember');
78+
$('#admin_{{$user->user_id}}_form').submit();">Y</button>
79+
<button onClick="$('#admin_{{$user->user_id}}_form').attr('action', '/declineMember');
80+
$('#admin_{{$user->user_id}}_form').submit();">N</button>
81+
<form id="admin_{{$user->user_id}}_form" style="width:0px; height:0px" action="/acceptMember" method="post">
82+
<input type="hidden" value="{{ $user->user_id }}" name="user"></input>
83+
<input type="hidden" value="{{ $user->project_id }}" name="project"></input>
84+
<input type="hidden" value="{{ Session::token() }}" name="_token">
85+
{{ csrf_field() }}
86+
</form>
87+
</td>
88+
</tr>
89+
@endforeach
90+
</table>
91+
</div>
92+
</div>
93+
</div>
94+
95+
96+
<div id="admin_new_post" style="display: none;">
97+
<script type="text/javascript" src="{{ asset('/js/tinymce/tinymce.min.js') }}"></script>
98+
<script type="text/javascript">
99+
tinymce.init({
100+
selector : "#new-post-info",
101+
plugins : ["advlist autolink lists link image charmap print preview anchor", "searchreplace visualblocks code fullscreen", "insertdatetime media table contextmenu paste"],
102+
toolbar : "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
103+
});
104+
</script>
105+
106+
<form action="/write_post" method="post">
107+
<div class="form-group">
108+
<textarea class="form-control" name="title" id="new-post" rows="1" placeholder="Your Post's Title"></textarea>
109+
<textarea class="form-control" name="summary" id="new-post" rows="2" placeholder="Your Post's Summary or Short Description"></textarea>
110+
<textarea style="height:450px" name="info" id="new-post-info" rows="20"></textarea>
111+
</div>
112+
<button type="submit" class="btn btn-primary">Create Post</button>
113+
<input type="hidden" value="{{ Session::token() }}" name="_token">
114+
{{ csrf_field() }}
115+
</form>
116+
</div>
25117
@endsection
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
@if(Auth::User())
2+
3+
<form action="/pushRequest" method="post">
4+
<div class="form-group">
5+
<textarea class="form-control" name="reason" rows="5" placeholder="Why I want to join."></textarea>
6+
</div>
7+
<button type="submit" class="btn btn-primary">Post Comment</button>
8+
<input type="hidden" value="{{ Session::token() }}" name="_token">
9+
<input type="hidden" value="{{$project->id}}" name="project_id">
10+
<input type="hidden" value="{{$project->name}}" name="project_name">
11+
{{ csrf_field() }}
12+
</form>
13+
14+
@else
15+
Please <a href="{{ url('/login') }}">login</a> if you want to join a project.
16+
@endif

0 commit comments

Comments
 (0)