/** * Execute the console command. * * @return mixed */ public function fire() { $users = User::all(); foreach ($users as $user) { if ($user->isTrialEnded()) { if ($user->plan == 'trial') { // this is the first time we are checking it $user->plan = 'trial_ended'; $user->save(); // create intercom event IntercomHelper::trialEnded($user, 'now'); // send email } } if ($user->trialWillEndExactlyInDays(3)) { // create intercom event IntercomHelper::trialWillEnd($user, 3); // send email $data = array('user' => $user); Mailman::make('emails.trialWillEnd')->with($data)->to($user->email)->subject('[Fruit Analytics] Your free trial is ending.')->send(); } if ($user->trialWillEndExactlyInDays(-1)) { // create intercom event IntercomHelper::trialEnded($user, '1-day-ago'); // send email $data = array('user' => $user); Mailman::make('emails.trialEndedFirst')->with($data)->to($user->email)->subject('[Fruit Analytics] Your free trial is ended')->send(); } if ($user->trialWillEndExactlyInDays(-7)) { // create intercom event IntercomHelper::trialEnded($user, '7-days-ago'); // send email $data = array('user' => $user); Mailman::make('emails.trialEndedSecond')->with($data)->to($user->email)->subject('[Fruit Analytics] ')->send(); } if ($user->trialWillEndExactlyInDays(-14)) { /// create intercom event IntercomHelper::trialEnded($user, '14-days-ago'); // send email $data = array('user' => $user); Mailman::make('emails.trialEndedThird')->with($data)->to($user->email)->subject('[Fruit Analytics]')->send(); } } }
public function doConnect() { // Validation $rules = array('stripe' => 'min:16|max:64|required'); // run the validation rules on the inputs $validator = Validator::make(Input::all(), $rules); if ($validator->fails()) { // validation error -> sending back $failedAttribute = $validator->invalid(); return Redirect::back()->with('error', $validator->errors()->get(key($failedAttribute))[0])->withInput(); // sending back data } else { // validator success try { // trying to login with this key Stripe\Stripe::setApiKey(Input::get('stripe')); $account = Stripe\Account::retrieve(); // catchable line // success $returned_object = json_decode(strstr($account, '{'), true); // updating the user $user = Auth::user(); $user->ready = 'connecting'; // setting key $user->stripe_key = Input::get('stripe'); // setting name if is null if (strlen($user->name) == 0) { $user->name = $returned_object['display_name']; } if (strlen($user->zoneinfo) == 0) { $user->zoneinfo = $returned_object['country']; } // saving user $user->save(); IntercomHelper::connected($user, 'stripe'); Queue::push('CalculateFirstTime', array('userID' => $user->id)); } catch (Stripe\Error\Authentication $e) { // code was invalid return Redirect::back()->with('error', "Authentication unsuccessful!"); } // redirect to get stripe return Redirect::route('auth.dashboard')->with(array('success' => 'Stripe connected.')); } }
public function doCancelSubscription() { $user = Auth::user(); if ($user->subscriptionId) { try { $result = Braintree_Subscription::cancel($user->subscriptionId); } catch (Exception $e) { return Redirect::back()->with('error', "Couldn't process subscription, try again later."); } $user->subscriptionId = ''; $user->plan = 'cancelled'; $user->save(); IntercomHelper::cancelled($user); return Redirect::route('auth.plan')->with('success', 'Unsubscribed successfully'); } else { Redirect::back()->with('error', 'No valid subscription'); } }
public static function wizard($step = NULL) { # user is the authenticated user $user = Auth::user(); # we will need a client for spreadsheet feeds + email + offline (to get a refreshtoken) $client = GooglespreadsheetHelper::setGoogleClient(); switch ($step) { case 'init': # render wizard step #1 return View::make('connect.connect-googlespreadsheet')->with(array('step' => 'choose-type', 'isBackgroundOn' => Auth::user()->isBackgroundOn, 'dailyBackgroundURL' => Auth::user()->dailyBackgroundURL())); break; # /case 'init' # /case 'init' case 'set-type': Log::info("session - " . Session::get('type')); # save the widget type in SESSION if (Input::get('type')) { Session::put('type', Input::get('type')); } Log::info("session - " . Session::get('type')); if (!$user->isGoogleSpreadsheetConnected()) { # if the user hasn't authorized with google # go to google oauth page $url = $client->createAuthUrl(); return Redirect::to($url); break; } else { # otherwise render the spreadsheet chooser wizard page # get the spreadsheet list $access_token = GooglespreadsheetHelper::getGoogleAccessToken($client, $user); $serviceRequest = new DefaultServiceRequest($access_token); ServiceRequestFactory::setInstance($serviceRequest); $spreadsheetService = new Google\Spreadsheet\SpreadsheetService(); $spreadsheetFeed = $spreadsheetService->getSpreadsheets(); # render choose-spreadsheet wizard step return View::make('connect.connect-googlespreadsheet')->with(array('step' => 'choose-spreadsheet', 'spreadsheetFeed' => $spreadsheetFeed, 'isBackgroundOn' => Auth::user()->isBackgroundOn, 'dailyBackgroundURL' => Auth::user()->dailyBackgroundURL(), 'type' => Session::get('type'))); } break; # / case 'set-type' # / case 'set-type' case 'set-spreadsheet': Log::info("session - " . Session::get('type')); if (Input::get('type')) { Session::put('type', Input::get('type')); } Log::info("session - " . Session::get('type')); # save the spreadsheet ID in SESSION Session::put("spreadsheetId", Input::get('spreadsheetId')); # init service $access_token = GooglespreadsheetHelper::getGoogleAccessToken($client, $user); $serviceRequest = new DefaultServiceRequest($access_token); ServiceRequestFactory::setInstance($serviceRequest); # get the spreadsheet they asked for in the POST $spreadsheetService = new Google\Spreadsheet\SpreadsheetService(); $spreadsheet = $spreadsheetService->getSpreadsheetById(Input::get('spreadsheetId')); # save the spreadsheet name in SESSION Session::put("spreadsheetName", $spreadsheet->getTitle()); # get the worksheet list for the selected spreadsheet $worksheetFeed = $spreadsheet->getWorksheets(); # render choose-worksheet wizard step return View::make('connect.connect-googlespreadsheet')->with(array('step' => 'choose-worksheet', 'worksheetFeed' => $worksheetFeed, 'isBackgroundOn' => Auth::user()->isBackgroundOn, 'dailyBackgroundURL' => Auth::user()->dailyBackgroundURL(), 'type' => Session::get('type'))); break; # /case 'set-spreadsheet' # /case 'set-spreadsheet' case 'set-worksheet': Log::info("session - " . Session::get('type')); if (Input::get('type')) { Session::put('type', Input::get('type')); } Log::info("session - " . Session::get('type')); # save the worksheet name in SESSION Session::put("worksheetName", Input::get('worksheetName')); # save the widget $widget_data = array('googleSpreadsheetId' => Session::get('spreadsheetId'), 'googleWorksheetName' => Session::get('worksheetName')); $widget_json = json_encode($widget_data); $widget = new Widget(); $widget->widget_name = Session::get('worksheetName') . ' - ' . Session::get('spreadsheetName'); $widget->widget_type = Session::get('type'); $widget->widget_provider = 'googlespreadsheet'; $widget->widget_source = $widget_json; $widget->widget_ready = false; $widget->dashboard_id = $user->dashboards()->first()->id; $widget->position = '{"size_x":3,"size_y":4,"col":1,"row":1}'; $widget->save(); return Redirect::route('dashboard.dashboard')->with('success', 'Google Spreadsheet widget added.'); break; # / case 'set-worksheet' # / case 'set-worksheet' default: // input has no step, this is the google auth return part # we got a code in GET from google if (Input::has('code')) { # lets get an access token try { $client->authenticate(Input::get('code')); } catch (Exception $e) { GooglespreadsheetHelper::disconnect(); return Redirect::route('connect.connect')->with('error', 'Something went wrong, try again please.'); } $credentials = $client->getAccessToken(); // big JSON stuff # lets make it an associative array $tokens_decoded = json_decode($credentials, true); # lets check if we have a refresh token already $refresh_token = $user->googleSpreadsheetRefreshToken; if (strlen($refresh_token) < 10) { # nope, let's use the one we got now $refresh_token = $tokens_decoded['refresh_token']; } # database save the access-stuff-JSON and the refresh token $user->googleSpreadsheetCredentials = $credentials; $user->googleSpreadsheetRefreshToken = $refresh_token; $user->save(); # good job, notify intercom IntercomHelper::connected($user, 'googlespreadsheet'); # auth $access_token = GooglespreadsheetHelper::getGoogleAccessToken($client, $user); # get the spreadsheet list $serviceRequest = new DefaultServiceRequest($access_token); ServiceRequestFactory::setInstance($serviceRequest); $spreadsheetService = new Google\Spreadsheet\SpreadsheetService(); $spreadsheetFeed = $spreadsheetService->getSpreadsheets(); # render choose-spreadsheet wizard step return View::make('connect.connect-googlespreadsheet')->with(array('step' => 'choose-spreadsheet', 'spreadsheetFeed' => $spreadsheetFeed, 'isBackgroundOn' => Auth::user()->isBackgroundOn, 'dailyBackgroundURL' => Auth::user()->dailyBackgroundURL())); } else { return View::make('connect.connect')->with(array('error' => 'Something went wrong with the Google authentication.', 'isBackgroundOn' => Auth::user()->isBackgroundOn, 'dailyBackgroundURL' => Auth::user()->dailyBackgroundURL())); } break; # / default } # /switch ($step) }