/** * 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')); }
/** * 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; }
/** * 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']); }