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;
    }
Example #5
0
 /**
  * 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]);
 }
Example #7
0
 /**
  * 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]);
 }
Example #8
0
<?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)];
});
Example #9
0
 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);
     }
 }