/**
  * Insert a new project
  * Return projects
  * @param Request $request
  * @return \Symfony\Component\HttpFoundation\Response
  */
 public function store(CreateProjectRequest $request)
 {
     $payer_email = $request->get('payer_email');
     //Check if the email is for a new payer, rather than a previous payer of the payee.
     //If it is, add the row to the payee_payer pivot table before creating the project.
     //Todo: If it is a new payer, do the appropriate validation errors
     //todo: (different for if the new payer email field is blank vs the previous payer input)
     if ($request->get('new_payer')) {
         Payee::addPayer($payer_email);
     }
     //Create the project
     return $this->projectsRepository->createProject($payer_email, $request->get('description'), $request->get('rate'));
 }
예제 #2
0
 /**
  * Update the specified resource in storage.
  *
  * @param  \App\Http\Request\CreateProjectRequest  $request
  * @param  int  $id
  * @return \Illuminate\Http\Response
  */
 public function update(CreateProjectRequest $request, $id)
 {
     $project = Project::findOrFail($id);
     $project->fill($request->all());
     $assignTo = $request->get('assignees', false);
     if ($assignTo !== false) {
         $project->assignees()->sync(null == $assignTo ? [] : $assignTo);
     }
     $project->save();
     return $project;
 }
예제 #3
0
 /**
  * Submit a completed, previously saved project.
  *
  * @param CreateProjectRequest $request
  * @param Project $project
  * @throws ProjectNameAlreadyTakenException
  * @return string
  */
 public function update(CreateProjectRequest $request, Project $project)
 {
     $existingProject = Project::where('project_name', '=', $request->get('project_name'))->first();
     if (!is_null($existingProject) && $existingProject->user_id != Auth::user()->id) {
         throw new ProjectNameAlreadyTakenException();
     }
     $projectDetails = ['project_name' => $request->get('project_name'), 'short_desc' => $request->get('short_desc'), 'full_desc' => $request->get('full_desc'), 'target_amount' => $request->get('target_amount'), 'child_name' => $request->get('child_name'), 'slug' => strtolower(preg_replace('/[\\s-]+/', '-', $request->get('project_name'))), 'application_status' => '1', 'user_id' => Auth::user()->id];
     $userDetails = ['first_name' => $request->get('first_name'), 'last_name' => $request->get('last_name'), 'email' => $request->get('email'), 'tel_number' => $request->get('tel_number'), 'street' => $request->get('street'), 'postcode' => $request->get('postcode'), 'city' => $request->get('city'), 'country' => $request->get('country')];
     $userDocuments = [$request->file('doc_1_mand') ? $request->file('doc_1_mand') : $request->get('doc1Mand'), $request->file('doc_2_mand') ? $request->file('doc_2_mand') : $request->get('doc2Mand'), $request->file('doc_3') ? $request->file('doc_3') : $request->get('doc3'), $request->file('doc_4') ? $request->file('doc_4') : $request->get('doc4'), $request->file('doc_5') ? $request->file('doc_5') : $request->get('doc5'), $request->file('doc_6') ? $request->file('doc_6') : $request->get('doc6')];
     $userImages = ['main_img' => $request->file('main_img') ? $request->file('main_img') : $request->get('mainImage'), 'img_2' => $request->file('img_2') ? $request->file('img_2') : $request->get('img2'), 'img_3' => $request->file('img_3') ? $request->file('img_3') : $request->get('img3'), 'img_4' => $request->file('img_4') ? $request->file('img_4') : $request->get('img4')];
     // Store the original project slug,
     // for the saved images, in case of user edit.
     $originalProjectSlug = $project->slug;
     // Update or fill the Project attributes.
     foreach ($projectDetails as $attribute => $value) {
         $project->{$attribute} = $value;
     }
     // Save the changes to the Project.
     $project->save();
     // Update user model.
     $user = Auth::user();
     foreach ($userDetails as $attribute => $value) {
         $user->{$attribute} = $value;
     }
     $user->save();
     // Make the image and document directories.
     $imageFolderPath = public_path("img/{$project->slug}");
     $documentFolderPath = public_path("documents/{$project->slug}");
     $this->makeImageDirectories($imageFolderPath);
     $this->makeDocumentDirectory($documentFolderPath);
     // Create new Document instances in the database.
     // Move the documents to their directory.
     $this->moveDocumentsAndSaveToDB($userDocuments, $documentFolderPath, $project->id, $originalProjectSlug);
     // Resize the images to our needs, and save them in their directories.
     $this->resizeImagesAndSaveToFolders($userImages, $project->child_name, $imageFolderPath, $originalProjectSlug);
     // Create new Image instances in the database.
     $this->saveImageInstancesToDB($userImages, $project->child_name, $project->id);
     // Mail the administrator, of a newly submitted project.
     $project = Auth::user()->project;
     Mail::queue('emails.project-submit', ['project' => $project], function ($message) {
         $message->to('*****@*****.**', 'Administrator')->subject(trans('create-project-form.email-subject'));
     });
     // Mail the user, of a successful project submission.
     Mail::queue('emails.project-submit-user', ['project' => $project, 'user' => $user], function ($message) use($user) {
         $message->to($user->email, $user->first_name . ' ' . $user->last_name)->subject(trans('project-submit-email.user-title'));
     });
     return json_encode(['status' => 'success']);
 }