public function store(DiscussionRequest $request) { $data = $request->all(); $data['user_id'] = Auth::user()->id; Discussion::create($data); return redirect('/product/' . $request->get('product_id')); }
/** * Generates a list of unread discussions. */ public function discussions() { $my_groups = Auth::user()->groups()->orderBy('name')->get(); $my_groups_id = false; // using this array we can adjust the queries after to only include stuff the user has // might be a good idea to find a clever way to build this array of groups id : foreach ($my_groups as $the_group) { $my_groups_id[] = $the_group->id; } $discussions = \App\Discussion::with('userReadDiscussion', 'group')->whereIn('group_id', $my_groups_id)->orderBy('updated_at', 'desc')->paginate(25); return view('dashboard.discussions')->with('discussions', $discussions); }
public function index(Request $request) { if ($request->has('query')) { $query = $request->get('query'); // build a list of public groups and groups the user has access to $my_groups = Auth::user()->groups()->orderBy('name')->get(); $my_groups_id = []; // using this array we can adjust the queries after to only include stuff the user has // might be a good idea to find a clever way to build this array of groups id : foreach ($my_groups as $the_group) { $my_groups_id[$the_group->id] = $the_group->id; } $public_groups = \App\Group::where('group_type', \App\Group::OPEN)->get(); $public_groups_id = []; // using this array we can adjust the queries after to only include stuff the user has // might be a good idea to find a clever way to build this array of groups id : foreach ($public_groups as $the_group) { $public_groups_id[$the_group->id] = $the_group->id; } $allowed_groups = array_merge($my_groups_id, $public_groups_id); $groups = \App\Group::where('name', 'like', '%' . $query . '%')->orWhere('body', 'like', '%' . $query . '%')->orderBy('name')->get(); $users = \App\User::where('name', 'like', '%' . $query . '%')->orWhere('body', 'like', '%' . $query . '%')->orderBy('name')->with('groups')->get(); $discussions = \App\Discussion::where('name', 'like', '%' . $query . '%')->orWhere('body', 'like', '%' . $query . '%')->whereIn('group_id', $allowed_groups)->orderBy('updated_at', 'desc')->with('group')->get(); $actions = \App\Action::where('name', 'like', '%' . $query . '%')->orWhere('body', 'like', '%' . $query . '%')->whereIn('group_id', $allowed_groups)->with('group')->orderBy('updated_at', 'desc')->get(); $files = \App\File::where('name', 'like', '%' . $query . '%')->whereIn('group_id', $allowed_groups)->with('group')->orderBy('updated_at', 'desc')->get(); $comments = \App\Comment::where('body', 'like', '%' . $query . '%')->with('discussion.group')->orderBy('updated_at', 'desc')->get(); // set in advance which tab will be active on the search results page $groups->class = ''; $discussions->class = ''; $actions->class = ''; $users->class = ''; $comments->class = ''; $files->class = ''; // the order of those ifs should match the order of the tabs on the results view :-) if ($groups->count() > 0) { $groups->class = 'active'; } elseif ($discussions->count() > 0) { $discussions->class = 'active'; } elseif ($actions->count() > 0) { $action->class = 'active'; } elseif ($users->count() > 0) { $users->class = 'active'; } elseif ($comments->count() > 0) { $comments->class = 'active'; } elseif ($files->count() > 0) { $files->class = 'active'; } return view('search.results')->with('groups', $groups)->with('users', $users)->with('discussions', $discussions)->with('files', $files)->with('comments', $comments)->with('actions', $actions)->with('query', $query); } }
/** * Returns a list of unread discussions for the $user_id $user, in the group_id group, since the $since time has passed */ public static function getUnreadDiscussionsSince($user_id, $group_id, $since) { $discussions = \App\Discussion::hydrateRaw('select * from ( select *, (select read_comments from user_read_discussion where discussion_id = discussions.id and user_id = :user_id) as read_comments from discussions where discussions.group_id = :group_id) as discussions where (discussions.total_comments > read_comments or read_comments is null) and discussions.updated_at > :since order by updated_at desc limit 0, 25 ', ['user_id' => $user_id, 'group_id' => $group_id, 'since' => $since]); return $discussions; }
/** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { //显示文章详细 $discussion = Discussion::findOrFail($id); return view('forum.show', compact('discussion')); }
/** * Update the specified resource in storage. * * @param int $id * * @return Response */ public function update(Request $request, Group $group, Discussion $discussion) { $discussion->name = $request->input('name'); $discussion->body = $request->input('body'); //$discussion->user()->associate(Auth::user()); // we use revisionable to manage who changed what, so we keep the original author $discussion->save(); flash()->info(trans('messages.ressource_updated_successfully')); return redirect()->action('DiscussionController@show', [$discussion->group->id, $discussion->id]); }
/** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Requests\StoreBolgRequest $request, $id) { $discussion = Discussion::findOrFail($id); $discussion->update($request->all()); return redirect()->action('PostController@show', ['id' => $discussion->id]); }
<?php /* |-------------------------------------------------------------------------- | Model Factories |-------------------------------------------------------------------------- | | Here you may define all of your model factories. Model factories give | you a convenient way to create models for testing and seeding your | database. Just tell the factory how a default model should look. | */ $factory->define(App\User::class, function (Faker\Generator $faker) { return ['name' => $faker->name, 'avatar' => $faker->imageUrl(256, 256), 'email' => $faker->email, 'password' => bcrypt(str_random(10)), 'remember_token' => str_random(10)]; }); $factory->define(App\Discussion::class, function (Faker\Generator $faker) { $user_ids = \App\User::lists('id')->toArray(); return ['title' => $faker->sentence, 'body' => $faker->paragraph, 'user_id' => $faker->randomElement($user_ids), 'last_user_id' => $faker->randomElement($user_ids)]; }); $factory->define(App\Comment::class, function (Faker\Generator $faker) { $user_ids = \App\User::lists('id')->toArray(); $discussion_ids = \App\Discussion::lists('id')->toArray(); return ['body' => $faker->paragraph, 'user_id' => $faker->randomElement($user_ids), 'discussion_id' => $faker->randomElement($discussion_ids)]; });
public function update($id, Request $request) { $discussion = Discussion::findOrFail($id); $discussion->update($request->all()); return redirect('d/' . $id); }
/** * Remove the specified resource from storage. * * @param int $id * * @return \Illuminate\Http\Response */ public function destroyConfirm(Request $request, $group_id, $discussion_id, $comment_id) { $comment = \App\Comment::findOrFail($comment_id); $group = \App\Group::findOrFail($group_id); $discussion = \App\Discussion::findOrFail($discussion_id); if (Gate::allows('delete', $comment)) { return view('comments.delete')->with('discussion', $discussion)->with('group', $group)->with('comment', $comment)->with('tab', 'discussion'); } else { abort(403); } }