예제 #1
0
 /**
  * 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);
 }
예제 #2
0
 /**
  * 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());
 }