command->info('Students table seeding started for term '.$term); // Initiates time $time_start = microtime(true); // Open file $file_path = 'http://136.145.180.72/tools/proceso_files/'; $file_name = 'webmatri_vivienda_b83-b91.dat'; if($file = fopen($file_path.$file_name, 'r')) { // Initialize count variables $read = 0; $added =0; $updated = 0; $error = 0; $warning = 0; // Read each row while($data = fgetcsv($file, 5000, ";")) { // Skip iterations from previous semesters if(trim($data[8]) != $term) { continue; } // Add read count $read++; try { // Get row info $number = str_pad(trim($data[1]), 9, '000000000', STR_PAD_LEFT); $name = trim(ucwords(strtoupper($data[2]))); $email = trim($data[15]).'@upr.edu'; $school_code = trim($data[5]); $conc_code = trim($data[7]); // If any row is empty, raise an exception if(!$number || !$name) { throw new Exception('NON-FATAL ERROR(line '.$read.'): Missing name or student number, read \''.implode(",", $data).'\''); } // If user has no email, issue warning and set default if(!$email) { $this->command->info('WARNING(line '.$read.'): Missing email, read \''.implode(",", $data).'\'; users will not be able to send messages to students without an email'); $email = 'olas.rrp@upr.edu'; $warning++; } // Check if student exists $student = Student::where('number', $number)->count(); // If s/he does, update information and add to updated if($student) { DB::table('students') ->where('number', $number) ->update( array( 'name' => $name, 'email' => $email, 'school_code' => $school_code, 'conc_code' => $conc_code, 'updated_at' => date("Y-m-d H:i:s"), ) ); $this->command->info($read.' - Updated '.$number.': '.$name.' ['.$school_code.' '.$conc_code.']'); $updated++; } // Otherwise, add student and add to added else { Student::create(array( 'number' => $number, 'name' => $name, 'email' => $email, 'school_code' => $school_code, 'conc_code' => $conc_code, 'created_at' => date("Y-m-d H:i:s"), 'updated_at' => date("Y-m-d H:i:s") ) ); $this->command->info($read.' - Added '.$number.': '.$name); $added++; } } // If an exception is raised, show the message and add to error catch(Exception $e) { $this->command->info($e->getMessage()); $error++; }; } // Stop time $time_end = microtime(true); // Display results $this->command->info('------------------------------------------------------------'); $this->command->info('Results on '.date('M d, Y, h:i:s a')); $this->command->info('- Runtime: '.(round($time_end - $time_start, 3)).' seconds'); $this->command->info('- Read: '.$read); $this->command->info('- Updated (active): '.$updated); $this->command->info('- Added (new active, all): '.$added); $this->command->info('- Added (new active, without email): '.$warning); $this->command->info('- Not updated (inactive): '.(Student::count() - $updated - $added)); $this->command->info('- Not added/updated (errors or missing information): '.($error)); // Close file fclose($file); } // File cannot be opened, display error and exit else { $this->command->info('File '.$file_name.' could not be opened. Make sure it is located in the app/database/csv directory of this project.'); } } }