/** * Show the form for editing the specified resource. * * @param int $id * @return Response */ public function edit($id) { if (Gate::denies('admin')) { abort(403); } $out = ['form_route' => ['route' => ['track.update', $id], 'method' => 'PUT', 'class' => 'form-horizontal'], 'artist_credit' => []]; $out['track'] = Track::findOrNew((int) $id); $out['genre'] = Genre::orderBy('id')->lists('name', 'id'); if (count(Request::old())) { $old = Request::old(); $out['release'] = Release::find($old['release_id']); if (isset($old['artist_credit']['id'])) { foreach ($old['artist_credit']['id'] as $n => $ac_id) { $artist = Artist::where('id', $ac_id)->firstOrFail(); if (count($artist)) { $out['artist_credit'][$n]['name'] = $artist->name; $out['artist_credit'][$n]['work_type_id'] = $old['artist_credit']['work'][$n]; $out['artist_credit'][$n]['join_phrase'] = $old['artist_credit']['join'][$n]; $out['artist_credit'][$n]['artist_id'] = $old['artist_credit']['id'][$n]; } } } } else { $out['release'] = $out['track']->release; $out['artist_credit'] = $out['track']->credit->credit_name; } $out['work_type'] = WorkType::all(); $out['genres_selected'] = []; foreach ($out['track']->genres as $row) { $out['genres_selected'][] = $row->id; } return view('tracks.form', $out); }
/** * Update the specified resource in storage. * * @param int $id * @return ReleaseRequest */ public function update(ReleaseRequest $request, $id) { if (Gate::denies('admin')) { abort(403); } $release = Release::find($id); // Old track data $req = $request->all(); // Request data // ----------------------------- if (isset($req['label']) && is_array($req['label'])) { $label = []; // label list $label_old = []; // label list foreach ($req['label'] as $n => $label_id) { $label[$n] = LabelRelease::where('release_id', $id)->where('label_id', $label_id)->first(); if ($label[$n] == null) { $label_new = ['label_id' => $label_id, 'release_id' => $id]; $label[$n] = new LabelRelease($label_new); $label[$n]->save(); } $label_old[] = $label[$n]->id; } LabelRelease::where('release_id', $id)->whereNotIn('id', $label_old)->delete(); } // ----------------------------- $genre = []; // genre list $genre_old = []; // genre list foreach ($req['genre'] as $n => $genre_id) { $genre[$n] = GenreRelease::where('release_id', $id)->where('genre_id', $genre_id)->first(); if ($genre[$n] == null) { $genre_new = ['genre_id' => $genre_id, 'release_id' => $id]; $genre[$n] = new GenreRelease($genre_new); $genre[$n]->save(); } $genre_old[] = $genre[$n]->id; } GenreRelease::where('release_id', $id)->whereNotIn('id', $genre_old)->delete(); // ----------------------------- $ac = []; // list of ArtistCreditNames $ac_old = []; // List of artist credit names that already exist $artists = []; // List of artists, just for counting foreach ($req['artist_credit']['work'] as $n => $work_id) { $artist_id = $req['artist_credit']['id'][$n]; $join_phrase = $req['artist_credit']['join'][$n]; $artists[$artist_id] = $join_phrase . ' ' . Artist::find($artist_id)->name; // artiat counter // Checking if ArtistCreditName already exists $ac[$artist_id . '_' . $work_id . '_' . $join_phrase] = ArtistCreditName::where('work_type_id', (int) $work_id)->where('artist_id', $artist_id)->where('join_phrase', $join_phrase)->where('artist_credit_id', $release->credit->id)->first(); if ($ac[$artist_id . '_' . $work_id . '_' . $join_phrase] == null) { // Creating new ArtistCreditName $ac_new = ['artist_credit_id' => $release->credit->id, 'artist_id' => $artist_id, 'work_type_id' => $work_id, 'position' => '', 'name' => Artist::find($artist_id)->name, 'join_phrase' => $join_phrase]; $ac[$artist_id . '_' . $work_id . '_' . $join_phrase] = new ArtistCreditName($ac_new); } // Sets position. Not important for now there is no ordering in form // TODO make ordering in form $ac[$artist_id . '_' . $work_id . '_' . $join_phrase]->position = $n; // Saving ArtistCreditNames $ac[$artist_id . '_' . $work_id . '_' . $join_phrase]->save(); // preventing deleting of used ArtistCreditNAmes $ac_old[] = $ac[$artist_id . '_' . $work_id . '_' . $join_phrase]->id; } // Delete not used ArtistCreditNames ArtistCreditName::where('artist_credit_id', $release->credit->id)->whereNotIn('id', $ac_old)->delete(); $release->credit->artist_count = count($artists); $release->credit->ref_count = count($ac); $release->credit->name = trim(implode(' ', $artists), ' &'); $release->credit->save(); // Saving track data $release->update($req); // Redirect back to Show with message return redirect()->route('release.show', ['release' => $id])->with('alert-success', [trans('htmusic.saved')]); // Release::find($id)->update($request->all()); }