Exemplo n.º 1
0
 public function postEdit($id, Request $request)
 {
     $photo = Photo::with('tags')->find($id);
     if (!$photo) {
         return redirect()->back()->withError('Photo not found.');
     }
     $validation = Validator::make($request->all(), ['title' => 'required|min:3', 'photo' => 'image', 'user_id' => 'required|integer|exists:users,id', 'tags' => 'required']);
     if ($validation->fails()) {
         return redirect()->back()->withInput()->withErrors($validation);
     }
     $isFileUploaded = $request->hasFile('photo');
     if ($isFileUploaded) {
         //First, delete the old photos and all sizes using Croppa
         Croppa::delete(public_path() . '/uploads/' . $photo->image);
         //Then Upload the image and return the filename
         $upload = Photo::upload($request->file('photo'));
     }
     //Tag Stuff
     //First, create(if needed) and return IDs of tags
     $tagIds = Tag::createAndReturnArrayOfTagIds($request->get('tags'));
     //If user wants to read the tags (keywords) from the file, then we need to fetch them from uploaded file.
     if ($isFileUploaded && $request->has('read_tags_from_file')) {
         $exif = exif_read_data($upload['fullpath'], 'ANY_TAG', true);
         if ($exif) {
             if (array_key_exists('IFD0', $exif)) {
                 if (array_key_exists('Keywords', $exif['IFD0'])) {
                     //array_unique, because same tags may be on both the form and the file, but only one is added to the database
                     //Keywords are delimited by semicolon ( ; ) in the tag data.
                     $tagIds = array_unique(array_merge($tagIds, Tag::createAndReturnArrayOfTagIds($exif['IFD0']['Keywords'], ';')));
                 }
             }
         }
     }
     //Tag Stuff end
     $photo->user_id = $request->get('user_id');
     $photo->title = $request->get('title');
     if ($isFileUploaded) {
         $photo->image = $upload['filename'];
     }
     $photo->save();
     //Now, sync all the associated tags
     $photo->tags()->sync($tagIds);
     return redirect()->back()->withSuccess('Photo updated successfully!');
 }
Exemplo n.º 2
0
 public function postNew(Request $request)
 {
     $validation = Validator::make($request->all(), ['title' => 'required|min:3', 'photo' => 'required|image', 'tags' => 'required']);
     if ($validation->fails()) {
         return redirect()->back()->withInput()->withErrors($validation);
     }
     //Upload the image and return the filename and full path
     $upload = Photo::upload($request->file('photo'));
     //Tag Stuff
     //First, create(if needed) and return IDs of tags
     $tagIds = Tag::createAndReturnArrayOfTagIds($request->get('tags'));
     //If user wants to read the tags (keywords) from the file, then we need to fetch them from uploaded file.
     if ($request->has('read_tags_from_file')) {
         $exif = exif_read_data($upload['fullpath'], 'ANY_TAG', true);
         if ($exif) {
             if (array_key_exists('IFD0', $exif)) {
                 if (array_key_exists('Keywords', $exif['IFD0'])) {
                     //array_unique, because same tags may be on both the form and the file, but only one is added to the database
                     //Keywords are delimited by semicolon ( ; ) in the EXIF tag data.
                     $tagIds = array_unique(array_merge($tagIds, Tag::createAndReturnArrayOfTagIds($exif['IFD0']['Keywords'], ';')));
                 }
             }
         }
     }
     //Tag Stuff end
     $photo = new Photo();
     $photo->user_id = Auth::user()->id;
     $photo->title = $request->get('title');
     $photo->image = $upload['filename'];
     $photo->save();
     //Now attach the tags, since this is creating method, attach() is okay
     $photo->tags()->attach($tagIds);
     return redirect()->back()->withSuccess('Photo Created Successfully!');
 }