/** * Update the specified faucet in storage. * * @param $slug * @return Response * @internal param int $id */ public function update($slug) { //Retrieve faucet to be updated. $faucet = Faucet::findBySlugOrId($slug); $id = $faucet->id; //Pass input into the validator - //with current faucet id, so //'not unique' errors won't be displayed //when updating. $validator = Validator::make(Input::except('send_tweet'), FaucetValidator::validationRulesEdit($id)); //If validation fails, redirect back to the //editing page - with input and relevant errors. if ($validator->fails()) { return Redirect::to('/admin/faucets/' . $slug . '/edit')->withErrors($validator)->withInput(Input::all()); } //Get all input from edit/update request, //then populate the faucet with the given //data. $faucet->fill(Input::except('send_tweet')); //Retrieve payment processor ids from update. $paymentProcessorIds = Input::get('faucet_payment_processors'); //Below logic disables foreign key checking before //updating many-to-many table (faucet_payment_processor) //that ties instances of faucets to instances of payment //processors. The retrieved payment processor ids are //iterated through, then synced with the current faucet in // the many-many table. Then foreign key checking is re-enabled. DB::statement('SET FOREIGN_KEY_CHECKS = 0'); $faucet->paymentProcessors()->detach(); foreach ($paymentProcessorIds as $paymentProcessorId) { $faucet->paymentProcessors()->attach((int) $paymentProcessorId); } DB::statement('SET FOREIGN_KEY_CHECKS = 1'); //Save the changes made to the faucet. $faucet->save(); if (Input::get('send_tweet') == 1) { $faucetUrl = url('/faucets/' . $faucet->slug); $user = User::find(Auth::user()->id); $twitter = new Twitter($user); $twitter->sendTweet("Hey everyone! Just updated #Bitcoin faucet (" . $faucet->name . ") @ " . $faucetUrl . " #FreeBTCWebsite"); } Session::flash('success_message', 'The faucet has successfully been updated!'); //Redirect to the faucet's page return Redirect::to('/faucets/' . $slug); }