private function createSpecialEvents()
    {
        //NSBreakfast May
        $nsBreakfastMay = Carbon::create(2016, 5, 6, 8, 0, 0, new \DateTimeZone('Australia/Melbourne'));
        $nsBreakfastMay->setTimezone(new \DateTimeZone('UTC'));
        // using slug as a unique string identifier
        $slug = Str::slug(Event::SPECIAL . " {$nsBreakfastMay}");
        $this->info("Special Event (NSBreakfast) {$nsBreakfastMay} UTC");
        $event = Event::firstOrNew(['slug' => $slug]);
        $event->type = Event::SPECIAL;
        $event->slug = $slug;
        $event->title = 'NSBreakfast';
        $event->subtitle = 'Informal and unstructured; Hang out, drink coffee, eat breakfast and chat iOS / OSX';
        $event->starts_at = $nsBreakfastMay;
        $event->ends_at = $nsBreakfastMay->copy()->addHours(2);
        $event->contact = 'https://twitter.com/nsbreakfast';
        $event->contact_name = 'Matt Delves';
        $event->location = '1000 £ Bend';
        $event->location_link = 'http://thousandpoundbend.com.au';
        $event->address_display = '361 Little Lonsdale St, Melbourne';
        $event->address = '361 Little Lonsdale St, Melbourne, VIC 3000';
        $event->lat = -37.811672;
        $event->lng = 144.959092;
        $event->save();
        //NSBreakfast June
        $nsBreakfastJune = Carbon::create(2016, 6, 3, 7, 30, 0, new \DateTimeZone('Australia/Melbourne'));
        $nsBreakfastJune->setTimezone(new \DateTimeZone('UTC'));
        $slug = Str::slug(Event::SPECIAL . " {$nsBreakfastJune}");
        $this->info("Special Event (NSBreakfast) {$nsBreakfastJune} UTC");
        $event = Event::firstOrNew(['slug' => $slug]);
        $event->type = Event::SPECIAL;
        $event->slug = $slug;
        $event->title = 'NSBreakfast';
        $event->subtitle = 'Informal and unstructured; Hang out, drink coffee, eat breakfast and chat iOS / OSX';
        $event->starts_at = $nsBreakfastJune;
        $event->ends_at = $nsBreakfastJune->copy()->addHours(2);
        $event->contact = 'https://twitter.com/nsbreakfast';
        $event->contact_name = 'Matt Delves';
        $event->location = 'Hash Specialty Coffee';
        $event->location_link = 'http://facebook.com/hashcoffeeroasters';
        $event->address_display = '113 Hardware St, Melbourne';
        $event->address = '113 Hardware St, Melbourne, VIC 3000';
        $event->lat = -37.8123025;
        $event->lng = 144.9605897;
        $event->save();
        //WWDC Event June 2016
        $wwdcEventJune2016 = Carbon::create(2016, 6, 16, 18, 30, 0, new \DateTimeZone('Australia/Melbourne'));
        $wwdcEventJune2016->setTimezone(new \DateTimeZone('UTC'));
        $slug = Str::slug(Event::SPECIAL . " {$wwdcEventJune2016}");
        $this->info("Special Event (WWDC) {$wwdcEventJune2016} UTC");
        $event = Event::firstOrNew(['slug' => $slug]);
        $event->type = Event::SPECIAL;
        $event->slug = $slug;
        $event->title = 'Cocoaheads WWDC Special Event';
        $event->subtitle = <<<'EOT'
We're going to start off with a special intro I'm calling 'The Keynote That Was' (TKTW) and we will then watch two 
to three WWDC sessions. Depending on what's available at the time, we might have a few options but the best ones will be
the State of the Union sessions that are usually presented on the Tuesday morning in San Francisco.
EOT;
        $event->starts_at = $wwdcEventJune2016;
        $event->ends_at = $wwdcEventJune2016->copy()->addHours(3);
        $event->location = 'Teamsquare';
        $event->location_link = 'https://teamsquare.co/contact';
        $event->address_display = 'Level 1, 520 Bourke Street, Melbourne';
        $event->address = 'Level 1, 520 Bourke Street, Melbourne VIC 3000';
        $event->lat = -37.8153744;
        $event->lng = 144.958427;
        $event->tickets = 'http://melbournecocoaheads-wwdc-2016.eventbrite.com.au';
        $event->contact = 'https://twitter.com/melbournecocoa';
        $event->contact_name = 'Jesse Collis';
        $event->save();
        $event->sponsors()->detach();
        $event->sponsors()->attach(Sponsor::where('name', '=', 'Teamsquare')->first());
        $event->sponsors()->attach(Sponsor::where('name', 'Odecee')->first());
    }
Example #2
0
 /**
  * Execute the job.
  *
  * @return void
  */
 public function handle()
 {
     if ($this->isSeeding) {
         $toTake = 200;
         // 200 societies
         $delay = 0;
         // Immediately
     } else {
         $toTake = 20;
         // 20 societies
         $delay = 600;
         // 10 Minutes
     }
     FacebookSession::setDefaultApplication(getenv('FB_ID'), getenv('FB_SECRET'));
     $session = FacebookSession::newAppSession();
     try {
         $session->validate();
     } catch (FacebookRequestException $ex) {
         // Session not valid, Graph API returned an exception with the reason.
         dd($ex);
     } catch (\Exception $ex) {
         // Graph API returned info, but it may mismatch the current app or have expired.
         dd($ex);
     }
     $store = \App\Setting::where('name', 'next_society')->first();
     $lastUpdated = $store->setting;
     // Get last society ID updated;
     $societies = \App\Society::where('id', '>', $lastUpdated)->take($toTake)->orderBy('id')->get();
     // Get Societies to query
     foreach ($societies as $society) {
         $request = new FacebookRequest($session, 'GET', '/' . $society->facebook_ref . '/events' . '?since=' . time() . '&fields=name,start_time,location,description,cover');
         try {
             $response = $request->execute();
         } catch (\Exception $ex) {
             continue;
             // TODO: Report errors back to us :)
         }
         $graphObject = $response->getGraphObject();
         $events = $graphObject->asArray();
         if (array_key_exists('data', $events)) {
             $events = $events['data'];
             foreach ($events as $fbEvent) {
                 $storedEvent = \App\Event::firstOrNew(['facebook_id' => $fbEvent->id]);
                 $storedEvent->society_id = $society->id;
                 $storedEvent->title = $fbEvent->name;
                 $storedEvent->time = $fbEvent->start_time;
                 if (array_key_exists("description", $fbEvent)) {
                     $storedEvent->description = $fbEvent->description;
                 }
                 if (array_key_exists("location", $fbEvent)) {
                     $storedEvent->location = $fbEvent->location;
                 }
                 if (array_key_exists("cover", $fbEvent)) {
                     $storedEvent->image = $fbEvent->cover->source;
                 }
                 $storedEvent->save();
             }
         }
     }
     if (count($societies) < $toTake) {
         $store->setting = 0;
     } else {
         $store->setting += $toTake;
     }
     $store->save();
     $job = (new \App\Jobs\UpdateEvents())->delay($delay);
     if (!$this->isSeeding) {
         $this->dispatch($job);
     }
 }