public function listing($page, $limit)
 {
     $response = array('data' => array(), 'paginator' => '');
     if (!empty($limit)) {
         $emails = Email::paginate($limit);
     } else {
         $emails = Email::where('id', '>', '0')->get();
     }
     if (!empty($emails)) {
         foreach ($emails as $key => $email) {
             $response['data'][] = $this->get($email->id, false);
         }
     }
     if (!empty($limit)) {
         $response = Utility::paginator($response, $emails, $limit);
     }
     return $response;
 }
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function handle()
 {
     // Find email that are ready to be started
     $emails = Email::where('started', 0)->whereNotNull('scheduled_for')->where('scheduled_for', '<=', DB::RAW('NOW()'))->get();
     // set every email as started
     foreach ($emails as $email) {
         $email->started = 1;
         $email->save();
     }
     foreach ($emails as $email) {
         // Generate email list
         // To add more email list edit this file and `App/Models/Email.php
         $list = [];
         $students = [];
         $newcomers = [];
         switch ($email->list) {
             case Email::STUPRELISTE:
                 $list['*****@*****.**'] = ['name' => 'STUPRE-liste', 'user' => null];
                 break;
             case Email::VOLUNTEERS:
                 $students = Student::where('volunteer', 1)->get();
                 break;
             case Email::CE_VALIDATED:
                 $students = Student::where('ce', 1)->whereNotNull('team_id')->where('team_accepted', 1)->get();
                 break;
             case Email::REFERRALS_VALIDATED:
                 $students = Student::where('referral', 1)->where('referral_validated', 1)->get();
                 break;
             case Email::REFERRALS_INCOMPLETE:
                 $students = Student::where('referral', 1)->where('referral_validated', 0)->where(function ($query) {
                     $query->where('phone', '')->orWhereNull('phone')->orWhere('email', '')->orWhereNull('email')->orWhere('referral_text', '')->orWhereNull('referral_text');
                 })->get();
                 break;
             case Email::REFERRALS_VALIDATED_BRANCH:
                 $students = Student::where('referral', 1)->where('referral_validated', 1)->where('branch', '<>', 'tc')->get();
                 break;
             case Email::REFERRALS_VALIDATED_TC:
                 $students = Student::where('referral', 1)->where('referral_validated', 1)->where('branch', '=', 'tc')->get();
                 break;
             case Email::ORGA:
                 $students = Student::where('orga', 1)->get();
                 break;
             case Email::ADMIN:
                 $students = Student::where('admin', 100)->get();
                 break;
             case Email::NEWCOMERS_ALL:
                 $newcomers = Newcomer::all();
                 break;
             case Email::NEWCOMERS_ALL_TC:
                 $newcomers = Newcomer::where('branch', 'TC')->get();
                 break;
             case Email::NEWCOMERS_ALL_BRANCH:
                 $newcomers = Newcomer::where('branch', '<>', 'TC')->where('branch', '<>', 'MP')->get();
                 break;
             case Email::NEWCOMERS_ALL_MASTER:
                 $newcomers = Newcomer::where('branch', 'MP')->get();
                 break;
             case Email::NEWCOMERS_FILLED:
                 $newcomers = Newcomer::where('email', '<>', '')->whereNotNull('email')->get();
                 break;
             case Email::NEWCOMERS_FILLED_TC:
                 $newcomers = Newcomer::where('branch', 'TC')->where('email', '<>', '')->whereNotNull('email')->get();
                 break;
             case Email::NEWCOMERS_FILLED_BRANCH:
                 $newcomers = Newcomer::where('branch', '<>', 'TC')->where('branch', '<>', 'MP')->where('email', '<>', '')->whereNotNull('email')->get();
                 break;
             case Email::NEWCOMERS_FILLED_MASTER:
                 $newcomers = Newcomer::where('branch', 'MP')->where('email', '<>', '')->whereNotNull('email')->get();
                 break;
             default:
                 echo 'Error : Unknown email list id';
                 break;
         }
         // Select email to put in the list
         foreach ($students as $student) {
             $list[$student->email] = ['name' => $student->first_name . ' ' . $student->last_name, 'user' => $student];
         }
         foreach ($newcomers as $newcomer) {
             if (!empty($newcomer->email)) {
                 $list[$newcomer->email] = ['name' => $newcomer->first_name . ' ' . $newcomer->last_name, 'user' => $newcomer];
             } elseif (!empty($newcomer->registration_email)) {
                 $list[$newcomer->registration_email] = ['name' => $newcomer->first_name . ' ' . $newcomer->last_name, 'user' => $newcomer];
             }
         }
         // Set count in db
         $email->done = 0;
         $email->total = count($list);
         $email->save();
         // Send emails
         $delay = 0;
         foreach ($list as $dest => $val) {
             $this->currentUser = $val['user'];
             $view = $email->template;
             if ($email->is_plaintext) {
                 $view = preg_replace_callback('/{{([A-Z0-9_]+)}}/i', array($this, 'replaceCallback'), $view);
                 $view = nl2br(e($view));
             } else {
                 $view = preg_replace_callback('/{{([A-Z0-9_]+)}}/i', array($this, 'replaceCallback'), $view);
             }
             $job = new SendEmail($email, $view, $dest, $val['name']);
             $job->delay($delay);
             $this->dispatch($job);
             $delay += 5;
         }
     }
 }