public function testPostStoreNewDiscussionRequestBeatmapsetDiscussion() { $currentDiscussions = BeatmapDiscussion::count(); $currentDiscussionPosts = BeatmapDiscussionPost::count(); $this->actingAs($this->user)->post(route('beatmap-discussion-posts.store'), ['beatmapset_id' => $this->otherBeatmapset->beatmapset_id, 'beatmap_discussion_post' => ['message' => 'Hello']])->assertResponseStatus(404); $this->assertEquals($currentDiscussions, BeatmapDiscussion::count()); $this->assertEquals($currentDiscussionPosts, BeatmapDiscussionPost::count()); }
public function setUp() { parent::setUp(); $this->user = factory(User::class)->create(); $this->beatmapset = factory(Beatmapset::class)->create(['user_id' => $this->user->user_id]); $this->beatmap = $this->beatmapset->beatmaps()->save(factory(Beatmap::class)->make(['user_id' => $this->user->user_id])); $this->beatmapsetDiscussion = BeatmapsetDiscussion::create(['beatmapset_id' => $this->beatmapset->beatmapset_id]); $this->beatmapDiscussion = BeatmapDiscussion::create(['beatmapset_discussion_id' => $this->beatmapsetDiscussion->id, 'timestamp' => 0, 'message_type' => 'praise', 'beatmap_id' => $this->beatmap->beatmap_id, 'user_id' => $this->user->user_id]); }
public function vote($id) { $discussion = BeatmapDiscussion::findOrFail($id); priv_check('BeatmapDiscussionVote', $discussion)->ensureCan(); $params = get_params(Request::all(), 'beatmap_discussion_vote', ['score:int']); $params['user_id'] = Auth::user()->user_id; if ($discussion->vote($params)) { return $discussion->beatmapsetDiscussion->defaultJson(Auth::user()); } else { return error_popup(trans('beatmaps.discussion-votes.update.error')); } }
/** * Bootstrap any application services. * * @return void */ public function boot() { // Validator::extend('mixture', function ($attribute, $value, $parameters, $validator) { return preg_match('/[\\d]/', $value) === 1 && preg_match('/[^\\d\\s]/', $value) === 1; }); BeatmapDiscussion::saving(function ($discussion) { return $discussion->isValid(); }); BeatmapDiscussionPost::saving(function ($post) { return $post->isValid(); }); ForumPollVote::saving(function ($vote) { return $vote->isValid(); }); }
public function store() { $discussion = BeatmapDiscussion::findOrNew(Request::input('beatmap_discussion_id')); $isNewDiscussion = $discussion->id === null; if ($isNewDiscussion) { $beatmapsetDiscussion = BeatmapsetDiscussion::where('beatmapset_id', Request::input('beatmapset_id'))->firstOrFail(); $discussion->beatmapset_discussion_id = $beatmapsetDiscussion->id; } $posts = [new BeatmapDiscussionPost($this->postParams($discussion))]; $previousDiscussionResolved = $discussion->resolved; $discussion->fill($this->discussionParams($isNewDiscussion)); priv_check('BeatmapDiscussionPost', $discussion)->ensureCan(); if ($discussion->resolved === true) { priv_check('BeatmapDiscussionResolve', $discussion)->ensureCan(); } if (!$isNewDiscussion && $discussion->resolved !== $previousDiscussionResolved) { $posts[] = BeatmapDiscussionPost::generateLogResolveChange(Auth::user(), $discussion->resolved); } try { $saved = DB::transaction(function () use($posts, $discussion) { if ($discussion->save() === false) { throw new Exception('failed'); } foreach ($posts as $post) { // done here since discussion may or may not previously exist $post->beatmap_discussion_id = $discussion->id; if ($post->save() === false) { throw new Exception('failed'); } } return true; }); } catch (Exception $_e) { $saved = false; } $postIds = array_pluck($posts, 'id'); if ($saved === true) { return ['beatmapset_discussion' => $posts[0]->beatmapsetDiscussion->defaultJson(Auth::user()), 'beatmap_discussion_post_ids' => $postIds, 'beatmap_discussion_id' => $discussion->id]; } else { return error_popup(trans('beatmaps.discussion-posts.store.error')); } }