Skip to content
Snippets Groups Projects
Commit 71c41141 authored by xamgore's avatar xamgore
Browse files

Refactoring of students upload page

parent f67c6fe2
No related merge requests found
...@@ -17,16 +17,16 @@ class Controller_Admin_Students extends Controller_Environment_Admin ...@@ -17,16 +17,16 @@ class Controller_Admin_Students extends Controller_Environment_Admin
} }
public function action_upload() { public function action_upload() {
$result['Success'] = false; $errors = [];
if (!empty($_FILES['students']) && $this->request->method() == 'POST') { if (!empty($_FILES['students']) && $this->request->method() == 'POST') {
$file = $_FILES["students"]["tmp_name"]; $file = $_FILES['students']["tmp_name"];
$result = FileParser::StudentsList($file, $_POST['facultyID']); $errors = FileParser::uploadStudents($file, $_POST['facultyID']);
} }
$this->twig->set([ $this->twig->set([
'UploadingResult' => $result, 'Errors' => $errors,
'Faculties' => Model_Faculties::load(), 'Faculties' => Model_Faculties::load(),
])->set_filename('admin/students/upload'); ])->set_filename('admin/students/upload');
} }
......
...@@ -2,34 +2,42 @@ ...@@ -2,34 +2,42 @@
class FileParser class FileParser
{ {
public static function StudentsList($filename, $facultyID) /**
{ * Parse students' info & synchronize it with database.
if(File::mime($filename) != 'text/plain') * @param $filename string File with source data
return true; * @param $facultyID int
$file = fopen($filename, "r"); * @return array errors
$i = $j = 0; $resultArr = array(); */
while ($line = fgetcsv($file, 0, ";")) public static function uploadStudents($filename, $facultyID) {
{ if (File::mime($filename) != 'text/plain')
// Имя, фамилия, отчество return [];
list($lastName, $firstName, $secondName) = self::parsePeopleName($line[0]);
// Курс, степень подготовки $file = fopen($filename, "r");
$gradeNum = $line[1];
$groupNum = $line[2]; $i = 0;
$degree = Model_Grades::getDegreeType($line[3]); $errors = [];
$specialization = $line[4];
while ($line = fgetcsv($file, 0, ";")) {
// ФИО, курс, степень подготовки,
list($name, $gradeNum, $groupNum, $degree, $spec) = $line;
// Фамилия, имя, отчество
list($lastName, $firstName, $secondName) = self::parsePeopleName($name);
$degree = Model_Grades::getDegreeType($degree);
$attempt = Model_Account::createStudentEx( $attempt = Model_Account::createStudentEx(
$lastName, $firstName, $secondName, $gradeNum, $groupNum, $degree, $specialization, $facultyID $lastName, $firstName, $secondName, $gradeNum, $groupNum, $degree, $spec, $facultyID
); );
if($attempt == -1) if ($attempt == -1) {
{ $errors[] = ['Row' => $i, 'Info' => implode(';', $line)];
$resultArr[$j]['Row'] = $i;
$resultArr[$j]['Info'] = implode(';', $line);
$j++;
} }
$i++; $i++;
} }
return ($j > 0) ? false : $resultArr;
return $errors;
} }
public static function SubjectsList($filename, $facultyID) public static function SubjectsList($filename, $facultyID)
...@@ -39,9 +47,9 @@ class FileParser ...@@ -39,9 +47,9 @@ class FileParser
$model = new Model_Students(); $model = new Model_Students();
if(File::mime($filename) != 'text/plain') if(File::mime($filename) != 'text/plain')
return $resultArr; return $resultArr;
$file = fopen($filename, "r"); $file = fopen($filename, "r");
$i = $errorsCount = $exists = 0; $i = $errorsCount = $exists = 0;
while ($line = fgetcsv($file, 0, ";")) while ($line = fgetcsv($file, 0, ";"))
{ {
$attempt = Model_Subject::create($line[0], $line[1], $facultyID); $attempt = Model_Subject::create($line[0], $line[1], $facultyID);
if((int)$attempt < 0) if((int)$attempt < 0)
...@@ -62,7 +70,7 @@ class FileParser ...@@ -62,7 +70,7 @@ class FileParser
$resultArr['RecordsCount'] = $i; $resultArr['RecordsCount'] = $i;
return $resultArr; return $resultArr;
} }
public static function TeachersList($filename) public static function TeachersList($filename)
{ {
// get faculties list // get faculties list
...@@ -77,7 +85,7 @@ class FileParser ...@@ -77,7 +85,7 @@ class FileParser
return true; return true;
$file = fopen($filename, "r"); $file = fopen($filename, "r");
$i = $j = 0; $i = $j = 0;
while ($line = fgetcsv($file, 0, ";")) while ($line = fgetcsv($file, 0, ";"))
{ {
// Имя, фамилия, отчество // Имя, фамилия, отчество
list($lastName, $firstName, $secondName) = self::parsePeopleName($line[0]); list($lastName, $firstName, $secondName) = self::parsePeopleName($line[0]);
...@@ -98,22 +106,26 @@ class FileParser ...@@ -98,22 +106,26 @@ class FileParser
} }
return ($j > 0) ? false : $resultArr; return ($j > 0) ? false : $resultArr;
} }
protected static function parsePeopleName($name) private static function parsePeopleName($name) {
{ $nameExploded = explode(' ', $name);
$nameExploded = explode(' ', $name);
$idx = 0; $nameHandled = array(); $idx = 0;
if(UTF8::substr($nameExploded[1], 0, 1) == '(') $nameHandled = [];
{
// Енотова (Сенченко) Наталья Лин Чу Геннадьевна
if (UTF8::substr($nameExploded[1], 0, 1) == '(') {
$idx = 1; $idx = 1;
} }
$nameHandled[0] = $nameExploded[0]; $nameHandled[0] = $nameExploded[0];
$nameHandled[1] = $nameExploded[1 + $idx]; $nameHandled[1] = $nameExploded[1 + $idx];
$nameHandled[2] = ''; $nameHandled[2] = '';
for($i = 2 + $idx; $i < count($nameExploded); $i++)
{ for ($i = 2 + $idx; $i < count($nameExploded); $i++) {
$nameHandled[2] .= $nameExploded[$i].' '; $nameHandled[2] .= $nameExploded[$i] . ' ';
} }
return Arr::map('trim', $nameHandled); return Arr::map('trim', $nameHandled);
} }
} }
\ No newline at end of file
...@@ -9,35 +9,41 @@ ...@@ -9,35 +9,41 @@
{% endblock %} {% endblock %}
{% block main_content %} {% block main_content %}
{% if UploadingResult is not empty %} {% if Errors is not empty %}
{% set res = '<ul>' %} {% set res %}
{% for item in UploadingResult %} {% for item in Errors %}
{{ res ~ '<li>Строка #' ~ item.Row ~ ': ' ~ item.Info ~ '</li>' }} <li>Строка #{{ item.Row }}: {{ item.Info }}</li>
{% endfor %} {% endfor %}
{{ admin.message(warning, 'Возникли проблемы!', res ~ '</ul>') }} {% endset %}
{{ admin.message(warning, 'Возникли проблемы!', '<ul>' ~ res ~ '</ul>') }}
{% endif %} {% endif %}
<form enctype="multipart/form-data" action="" method="POST"> <form enctype="multipart/form-data" action="" method="POST">
<div class="stepBox" id="FirstStep"> <div class="stepBox" id="FirstStep">
<div class="step_title"> <div class="step_title">
<span class='step_title_count'>Шаг 1:</span> <span class='step_title_description'>Выберите подразделение университета</span> <span class='step_title_count'>Шаг 1:</span>
</div> <span class='step_title_description'>Выберите подразделение университета</span>
<div class="step_body"> </div>
<select id="facultySelect" name="facultyID"> <div class="step_body">
<option value="0">— Подразделение ЮФУ —</option> <select id="facultySelect" name="facultyID">
{% for row in Faculties %} <option value="0" selected="selected">— Подразделение ЮФУ —</option>
<option value="{{ row.ID }}">{{ row.Name }} ({{ row.Abbr }})</option> {% for row in Faculties %}
{% endfor %} <option value="{{ row.ID }}">{{ row.Name }} ({{ row.Abbr }})</option>
</select> {% endfor %}
</select>
</div>
</div> </div>
</div>
<div class="stepBox" id="SecondStep"> <div class="stepBox" id="SecondStep">
<div class="step_title"> <div class="step_title">
<span class='step_title_count'>Шаг 2:</span> <span class='step_title_description'>Выберите файл для загрузки</span> <span class='step_title_count'>Шаг 2:</span>
</div> <span class='step_title_description'>Выберите файл для загрузки</span>
<div class="step_body"> </div>
<input name="students" type="file"> <div class="step_body">
<input type="submit" value="Send"> <input name="students" type="file">
<input type="submit" value="Send">
</div>
</div> </div>
</div>
</form> </form>
{% endblock %} {% endblock %}
\ No newline at end of file
$(function() $(function()
{ {
$("#facultySelect [value='0']").attr('selected', 'selected'); var jFaculty = $('#facultySelect');
$('#facultySelect').change(function(){ jFaculty.change(function() {
if (($('#facultySelect option:selected').val()!= '0')) { var item = jFaculty.find('option:selected').val();
$('#SecondStep').css('display', 'block'); $('#SecondStep').css('display', Number(item) ? 'block' : 'none');
} });
});
}); });
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment