Beispiel #1
0
 /**
  * Display a listing of the resource.
  *
  * @param \App\Models\Track $track
  * 
  * @return \Illuminate\Http\Response
  */
 public function index(Track $track)
 {
     $tracks = apihelper($track->with('tagged', 'media'))->collection();
     $tracks->each(function ($track) {
         $track->prepare();
     });
     return response()->json($tracks);
 }
 public function actionUpload()
 {
     Yii::$app->response->format = Response::FORMAT_JSON;
     $result = [];
     $files = UploadedFile::getInstances(new File(), 'uploadedFiles');
     foreach ($files as $index => $file) {
         $model = new File();
         $model->uploadedFiles = [$file];
         $model->user_id = Yii::$app->user->id;
         $model->storage = File::STORAGE_OS;
         $model->extension = $file->extension;
         $model->type = File::defineType($model->extension);
         if ($model->upload()) {
             $item = ['id' => $model->id, 'url' => $model->getUrl(), 'type' => $model->getMimeType()];
             if ($releaseId = Yii::$app->request->get('rid')) {
                 $release = Release::findOne($releaseId);
                 if ($release && $release->artist->user_id == Yii::$app->user->id) {
                     if ($model->type == $model::TYPE_IMAGE) {
                         $cover = new Cover(['release_id' => $release->id, 'file_id' => $model->id, 'is_main' => false]);
                         $cover->save();
                         $item['image_id'] = $cover->id;
                     } elseif ($model->type == $model::TYPE_AUDIO) {
                         $track = new Track(['release_id' => $release->id, 'original_name' => $file->baseName, 'number' => $release->getTracks()->count() + 1, 'file_id' => $model->id]);
                         $track->save();
                         $item['track_id'] = $track->id;
                         $item['comname'] = $track->getComname();
                         $item['number'] = $track->number;
                     }
                 }
             }
             if ($artistId = Yii::$app->request->get('aid')) {
                 $photo = new Photo(['artist_id' => (string) $artistId, 'file_id' => $model->id, 'is_main' => false]);
                 $artist = Artist::findOne($artistId);
                 if ($artist && $artist->user_id == Yii::$app->user->id) {
                     $photo->save();
                     $item['image_id'] = $photo->id;
                 }
             }
             //                if ($model->type == $model::TYPE_AUDIO) {
             //                    $getID3 = new getID3();
             //                    $tags = $getID3->analyze($model->getPath(true))['tags']['id3v2'];
             //                    $item['meta'] = [
             //                        'title' => $tags['title'][0],
             //                        'number' => explode('/', $tags['track_number'][0])[0],
             //                        'disc' => explode('/', $tags['part_of_a_set'][0])[0],
             //                        'lyric' => $tags['unsynchronised_lyric'][0],
             //                        'info' => $tags['comment'][0],
             //                    ];
             //                }
             if ($model->type == $model::TYPE_AUDIO) {
                 $item['meta'] = ['title' => $file->baseName, 'number' => $index + 1, 'disc' => '', 'lyric' => '', 'info' => ''];
             }
             $result[] = $item;
         }
     }
     return $result;
 }
 /**
  * Creates a new Release model.
  * If creation is successful, the browser will be redirected to the 'view' page.
  * @return mixed
  */
 public function actionCreate($artistId = null)
 {
     $release = new Release();
     if ($artistId) {
         $release->artist_id = $artistId;
     }
     $covers = [];
     $tracks = [];
     $artist_name = $artistId ? $release->artist->original_name : '';
     if (Yii::$app->request->isPost) {
         for ($i = 0; $i < count(Yii::$app->request->post('Cover', [])); $i++) {
             $covers[] = new Cover();
         }
         for ($i = 0; $i < count(Yii::$app->request->post('Track', [])); $i++) {
             $tracks[] = new Track();
         }
         $release->load(Yii::$app->request->post());
         $is_release_valid = $release->validate();
         if (!$release->artist_id) {
             $artist_name = Yii::$app->request->post()['artist_name'];
             $artist = new Artist(['original_name' => $artist_name, 'user_id' => Yii::$app->user->id]);
             $is_artist_valid = $artist->validate();
         } else {
             $is_artist_valid = true;
         }
         Cover::loadMultiple($covers, Yii::$app->request->post());
         $is_covers_valid = Cover::validateMultiple($covers);
         Track::loadMultiple($tracks, Yii::$app->request->post());
         $is_tracks_valid = Track::validateMultiple($tracks);
         if ($is_release_valid && $is_artist_valid && $is_covers_valid && $is_tracks_valid) {
             $transaction = Yii::$app->db->beginTransaction();
             try {
                 if (isset($artist)) {
                     $artist->save(false);
                     $release->artist_id = $artist->id;
                 }
                 $release->save(false);
                 foreach ($covers as $cover) {
                     $release->link('covers', $cover);
                 }
                 foreach ($tracks as $track) {
                     $release->link('tracks', $track);
                 }
                 $tags = Yii::$app->request->post('Release', '');
                 $tags = Tag::find()->where(['in', 'id', explode(',', $tags['tags'])])->all();
                 foreach ($tags as $tag) {
                     $release->link('tags', $tag);
                 }
                 $transaction->commit();
                 return $this->redirect(['view', 'id' => $release->id]);
             } catch (\Exception $e) {
                 $transaction->rollBack();
                 throw $e;
             }
         }
     }
     return $this->render('create', ['release' => $release, 'covers' => $covers, 'tracks' => $tracks, 'trackProto' => new Track(), 'artist_name' => $artist_name]);
 }
 /**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = Track::find();
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     $this->load($params);
     if (!$this->validate()) {
         // uncomment the following line if you do not want to return any records when validation fails
         // $query->where('0=1');
         return $dataProvider;
     }
     $query->andFilterWhere(['id' => $this->id, 'release_id' => $this->release_id, 'number' => $this->number, 'disc' => $this->disc, 'file_id' => $this->file_id]);
     $query->andFilterWhere(['like', 'original_name', $this->original_name])->andFilterWhere(['like', 'latin_name', $this->latin_name])->andFilterWhere(['like', 'lyric', $this->lyric])->andFilterWhere(['like', 'info', $this->info])->andFilterWhere(['like', 'format', $this->format]);
     return $dataProvider;
 }
Beispiel #5
0
     * @return \yii\db\ActiveQuery
     */
    public function getRelease()
    {
        return $this->hasOne(Release::className(), ['id' => 'release_id']);
    }
    /**
     * @return \yii\db\ActiveQuery
     */
    public function getFile()
    {
        return $this->hasOne(File::className(), ['id' => 'file_id']);
    }
    /**
     * @return \yii\db\ActiveQuery
     */
    public function getTags()
    {
        return $this->hasMany(Tag::className(), ['id' => 'tag_id'])->viaTable('track_tag', ['track_id' => 'id']);
    }
    /**
     * @return string
     */
    public function getComname()
    {
        return Utils::mergeNames($this->original_name, $this->latin_name);
    }
}
Event::on(Track::className(), Track::EVENT_BEFORE_DELETE, function ($event) {
    $event->sender->file->delete();
});
Beispiel #6
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getTracks()
 {
     return $this->hasMany(Track::className(), ['id' => 'track_id'])->viaTable('track_tag', ['tag_id' => 'id']);
 }
 public function actionTrack()
 {
     $model = Track::findOne(Yii::$app->request->post('pk', ''));
     $ownerId = $model->release->artist->user_id;
     return self::update($model, $ownerId);
 }
Beispiel #8
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getTracks()
 {
     return $this->hasMany(Track::className(), ['release_id' => 'id']);
 }
Beispiel #9
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getTrack()
 {
     return $this->hasOne(Track::className(), ['file_id' => 'id']);
 }
 /**
  * Finds the Track model based on its primary key value.
  * If the model is not found, a 404 HTTP exception will be thrown.
  * @param integer $id
  * @return Track the loaded model
  * @throws NotFoundHttpException if the model cannot be found
  */
 protected function findModel($id)
 {
     if (($model = Track::findOne($id)) !== null) {
         if ($model->release->artist->user_id != Yii::$app->user->id) {
             throw new ForbiddenHttpException();
         }
         return $model;
     } else {
         throw new NotFoundHttpException('The requested page does not exist.');
     }
 }