123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- <?php
-
- class CourseTableSeeder extends Seeder {
-
- public function run()
- {
- // Disable query logging to avoid memory exhaustion
- DB::disableQueryLog();
-
- $this->command->info('Courses table seeding started...');
-
- // Initiates time
- $time_start = microtime(true);
-
- // Open file
- if($file = fopen('app/database/csv/courses.csv', 'r'))
- {
- // Initialize count variables
- $read = 0;
- $added =0;
- $updated = 0;
- $error = 0;
-
- // Read each row
- while($data = fgetcsv($file, 5000, "|")) // se cambio delimitador para evitar problemas con nombres separados del apellido por coma
- {
- // Add read count
- $read++;
- // $this->command->info(print_r($data));
-
- try
- {
- // Get row info
- $name = $data[6];
- $code = trim(substr($data[0], 0, 4));
- $number = trim(substr($data[0], 4, 4));
- $section = trim(substr($data[0], 8, 3));
- $user_id = User::select('id')->where('ssn', trim($data[14]))->first();
- $semester_id = Semester::select('id')->where('code', strtoupper(trim($data[2])))->first();
- $program_code = trim($data[7]);
-
- // If any row is empty, raise an exception
- if($name=='' || $code=='' || $number=='' || $section=='' || trim($data[14])=='' || trim($data[2])=='')
- {
- throw new Exception('NON-FATAL ERROR(line '.$read.'): Missing information, read \''.implode(",", $data).'\'');
- }
-
- // Fetch semester. If it doesn't exist, abort script
- if(!$semester_id['id'])
- {
- $this->command->info('FATAL ERROR(line '.$read.'): Semester not found in the database.');
- exit();
- }
- else
- {
- $semester_id = $semester_id['id'];
- }
-
- // Fetch program. If it doesn't exist, set default program
- $preexisting_course = Course::select('program_id')->where('code', $code)->where('number', $number)->first();
- $program_id = 999;
- if($preexisting_course)
- {
- $program_id = Program::find($preexisting_course->program_id)->id;
- }
- elseif(Program::select('id')->where('code', $program_code)->first())
- {
- $program_id = Program::select('id')->where('code', $program_code)->first()->id;
- }
-
- // Fetch user. If it doesn't exist, set default user
- if(!$user_id && !$user_id['id'])
- {
- $user_id = 60; // Id for default user. Check DB for user with ssn 000000000.
- }
- else
- {
- $user_id = $user_id['id'];
- }
-
- // Check if course exists
- $course = Course::where('code', $code)->where('number', $number)->where('section', $section)->where('semester_id', $semester_id)->first();
-
- //If it does, update information and add to updated
- if($course)
- {
- //print_r($course);
- DB::table('courses')
- ->where('id', $course->id)
- ->update(
- array(
- 'name' => $name,
- 'code' => $code,
- 'number' => $number,
- 'section' => $section,
- 'program_id' => $program_id,
- 'user_id' => $user_id,
- 'updated_at' => date("Y-m-d H:i:s", time())
- )
- );
- $this->command->info('Updated '.$code.$number.$section.': '.$name);
- $updated++;
-
- }
- // Otherwise, add course and add to added
- else
- {
- Course::create(array(
- 'name' => $name,
- 'code' => $code,
- 'number' => $number,
- 'section' => $section,
- 'program_id' => $program_id,
- 'user_id' => $user_id,
- 'semester_id' => $semester_id
- )
- );
- $this->command->info('Added '.$code.$number.$section.': '.$name);
- $added++;
- }
- }
-
- // If an exception is raised, show the message and add to error
- catch(Exception $e)
- {
- $this->command->info($e->getMessage().'[RECORD '.$read.']'.$e->getLine());
- $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): '.$added);
- $this->command->info('- Not updated (inactive): '.(Course::count() - $updated - $added));
- $this->command->info('- Not added/updated (errors or missing information): '.($error));
- $this->command->info('- Note: A negative number in the results may mean there are duplicate values.');
-
-
-
- // Close file
- fclose($file);
- }
- // File cannot be opened, display error and exit
- else
- {
- $this->command->info('File '.$filename.' could not be opened. Make sure it is located in the app/database/csv directory of this project.');
- }
- }
-
- }
|