Skip to content
Snippets Groups Projects
Commit 80b38dd7 authored by Andrew Rudenets's avatar Andrew Rudenets
Browse files

1. Профили пользователей в админ-панели

2. Рефакторинг
parent 7aaaaef0
Branches
Tags
No related merge requests found
Showing
with 288 additions and 144 deletions
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Admin_Profile extends Controller_UserEnvi {
public function action_student()
{
$twig = Twig::factory('admin/students/profile');
$id = $this->request->param('param1');
$model = new Model_Account;
$degrees = array('bachelor' => 'Бакалавриат', 'specialist' => 'Специалитет', 'master' => 'Магистратура');
$profile = $model->getPersonalInfoByID($id)->offsetGet(0);
$profile['Degree'] = $degrees[$profile['StudentDegree']];
$twig->Account = $model->getAccountInfoByID($id)->offsetGet(0);
$twig->Profile = $profile;
$twig->User = $this->UserInfo;
$this->response->body($twig);
}
public function action_teacher()
{
$twig = Twig::factory('admin/teachers/profile');
$id = $this->request->param('param1');
$model = new Model_Account;
$twig->Account = $model->getAccountInfoByID($id)->offsetGet(0);
$twig->Profile = $model->getPersonalInfoByID($id)->offsetGet(0);
$twig->User = $this->UserInfo;
$this->response->body($twig);
}
}
\ No newline at end of file
......@@ -104,21 +104,11 @@ class Controller_Handler_AdmStudents extends Controller_Handler {
public function action_getStudentsByGrade()
{
$facultyID = $this->post->offsetGet('gradeNum');
$groupID = $this->post->offsetGet('gradeID');
$gradeID = $this->post->offsetGet('gradeID');
if($groupID != 0)
{
$students = $this->model->getStudentsByStudyGroups($groupID);
$studentsHandled = array(); $i = 0;
foreach($students as $row)
{
$i++;
$studentsHandled[$i]['LastName'] = $row['StudentLast'];
$studentsHandled[$i]['FirstName'] = $row['StudentFirst'];
$studentsHandled[$i]['SecondName'] = $row['StudentSecond'];
}
$twig = Twig::factory('admin/students/handler/listOutput');
$twig->List = $studentsHandled;
$twig->List = DataArray::factory('Students')->byGrade($gradeID)->asArray();
$this->response->body($twig);
}
}
......@@ -128,17 +118,8 @@ class Controller_Handler_AdmStudents extends Controller_Handler {
$groupID = $this->post->offsetGet('studyGroupID');
if($groupID != 0)
{
$students = $this->model->getStudentsByStudyGroups($groupID);
$studentsHandled = array(); $i = 0;
foreach($students as $row)
{
$i++;
$studentsHandled[$i]['LastName'] = $row['StudentLast'];
$studentsHandled[$i]['FirstName'] = $row['StudentFirst'];
$studentsHandled[$i]['SecondName'] = $row['StudentSecond'];
}
$twig = Twig::factory('admin/students/handler/listOutput');
$twig->List = $studentsHandled;
$twig->List = DataArray::factory('Students')->byStudyGroup($facultyID)->asArray();
$this->response->body($twig);
}
}
......@@ -148,17 +129,8 @@ class Controller_Handler_AdmStudents extends Controller_Handler {
$facultyID = $this->post->offsetGet('facultyID');
if($facultyID != 0)
{
$students = $this->model->getStudentsByFaculty($facultyID);
$studentsHandled = array(); $i = 0;
foreach($students as $row)
{
$i++;
$studentsHandled[$i]['LastName'] = $row['StudentLast'];
$studentsHandled[$i]['FirstName'] = $row['StudentFirst'];
$studentsHandled[$i]['SecondName'] = $row['StudentSecond'];
}
$twig = Twig::factory('admin/students/handler/listOutput');
$twig->List = $studentsHandled;
$twig->List = DataArray::factory('Students')->byFaculty($facultyID)->asArray();
$this->response->body($twig);
}
}
......
......@@ -68,47 +68,18 @@ class Controller_Handler_AdmTeachers extends Controller_Handler {
{
$departmentID = $this->post->offsetGet('departmentID');
$facultyID = $this->post->offsetGet('facultyID');
$teachersHandled = array();
if($departmentID != 0)
{
$teachers = $this->model->getTeachersByDepartment($departmentID);
$i = 0;
foreach($teachers as $row)
{
$i++;
$teachersHandled[$i]['ID'] = $row['TeacherID'];
$teachersHandled[$i]['FirstName'] = $row['TeacherFirst'];
$teachersHandled[$i]['SecondName'] = $row['TeacherSecond'];
$teachersHandled[$i]['LastName'] = $row['TeacherLast'];
$teachersHandled[$i]['JobPositionName'] = $row['JobPositionName'];
$teachersHandled[$i]['DepartmentName'] = $row['DepName'];
}
}
$teachers = DataArray::factory('Teachers')->byDepartment($departmentID)->asArray();
elseif($facultyID != 0)
{
$teachers = $this->model->getTeachersByFaculty($facultyID);
$i = 0;
foreach($teachers as $row)
{
$i++;
$teachersHandled[$i]['ID'] = $row['TeacherID'];
$teachersHandled[$i]['FirstName'] = $row['TeacherFirst'];
$teachersHandled[$i]['SecondName'] = $row['TeacherSecond'];
$teachersHandled[$i]['LastName'] = $row['TeacherLast'];
$teachersHandled[$i]['JobPositionName'] = $row['JobPositionName'];
$teachersHandled[$i]['DepartmentID'] = $row['DepID'];
$teachersHandled[$i]['DepartmentName'] = $row['DepName'];
}
}
$teachers = DataArray::factory('Teachers')->byFaculty($facultyID)->asArray();
$twig = Twig::factory('admin/teachers/handler/listOutput');
$twig->List = $teachersHandled;
$twig->List = $teachers;
$this->response->body($twig);
}
public function action_getDepartmentsList()
{
$facultyID = $this->post->offsetGet('facultyID');
$this->response->body(json_encode(DataArray::factory('Departments')->byFaculty($facultyID)));
$this->response->body(DataArray::factory('Departments')->byFaculty($facultyID)->asJSON());
}
}
\ No newline at end of file
......@@ -25,7 +25,7 @@ class DataArr_Departments {
$departamentsHandled[$i]['Name'] = '<служебная кафедра>';
}
}
return $departamentsHandled;
return new DataArray_Result($departamentsHandled);
}
}
......
......@@ -7,5 +7,61 @@ class DataArr_Students {
$this->model = new Model_DataArr_Students;
}
// TODO: Методы для получения студентов
public function byStudyGroup($groupID)
{
$students = $this->model->getStudentsByStudyGroups($groupID);
return new DataArray_Result($this->generateArray($students));
}
public function byFaculty($facultyID)
{
$students = $this->model->getStudentsByFaculty($facultyID);
return new DataArray_Result($this->generateArray($students));
}
public function byGrade($gradeID)
{
$students = $this->model->getStudentsByGrade($gradeID);
return new DataArray_Result($this->generateArray($students));
}
protected function getDegreeTitle($degree)
{
switch($degree)
{
case 'bachelor':
{
return 'Бакалавриат';
}
case 'specialist':
{
return 'Специалитет';
}
case 'master':
{
return 'Магистратура';
}
}
}
protected function generateArray($students)
{
$studentsHandled = array(); $i = 0;
foreach($students as $row)
{
$i++;
$studentsHandled[$i]['ID'] = $row['StudentID'];
$studentsHandled[$i]['AccountID'] = $row['StudentAccID'];
$studentsHandled[$i]['LastName'] = $row['StudentLast'];
$studentsHandled[$i]['FirstName'] = $row['StudentFirst'];
$studentsHandled[$i]['SecondName'] = $row['StudentSecond'];
$studentsHandled[$i]['GroupID'] = $row['GroupID'];
$studentsHandled[$i]['GradeID'] = $row['GradeID'];
$studentsHandled[$i]['GradeNum'] = $row['GroupGrade'];
$studentsHandled[$i]['Degree'] = $this->getDegreeTitle($row['GroupDegree']);
$studentsHandled[$i]['GroupNum'] = $row['GroupNum'];
}
return $studentsHandled;
}
}
......@@ -8,7 +8,7 @@ class DataArr_Teachers {
$this->model = new Model_DataArr_Teachers;
}
public function byFacutly($facultyID)
public function byFaculty($facultyID)
{
if($facultyID != 0)
{
......@@ -18,6 +18,7 @@ class DataArr_Teachers {
{
$i++;
$teachersHandled[$i]['ID'] = $row['TeacherID'];
$teachersHandled[$i]['AccountID'] = $row['TeacherAccID'];
$teachersHandled[$i]['FirstName'] = $row['TeacherFirst'];
$teachersHandled[$i]['SecondName'] = $row['TeacherSecond'];
$teachersHandled[$i]['LastName'] = $row['TeacherLast'];
......@@ -26,7 +27,7 @@ class DataArr_Teachers {
$teachersHandled[$i]['DepartmentName'] = $row['DepName'];
}
}
return $teachersHandled;
return new DataArray_Result($teachersHandled);
}
public function byDepartment($departmentID)
......@@ -37,13 +38,14 @@ class DataArr_Teachers {
{
$i++;
$teachersHandled[$i]['ID'] = $row['TeacherID'];
$teachersHandled[$i]['AccountID'] = $row['TeacherAccID'];
$teachersHandled[$i]['FirstName'] = $row['TeacherFirst'];
$teachersHandled[$i]['SecondName'] = $row['TeacherSecond'];
$teachersHandled[$i]['LastName'] = $row['TeacherLast'];
$teachersHandled[$i]['JobPositionName'] = $row['JobPositionName'];
$teachersHandled[$i]['DepartmentName'] = $row['DepName'];
}
return $teachersHandled;
return new DataArray_Result($teachersHandled);
}
public function forDiscipline($disciplineID, $asConcat = false, $asInitials = false)
......
<?php
class DataArray_Result {
protected $dataArr;
public function __construct($dataArr) {
$this->dataArr = $dataArr;
}
public function asArray()
{
return $this->dataArr;
}
public function asJSON()
{
return json_encode($this->dataArr);
}
}
......@@ -14,24 +14,12 @@ class Model_Admin_Students extends Model
return DB::query(Database::SELECT, $sql)->execute();
}
public function getStudentsByStudyGroups($groupID)
{
$sql = "CALL `GetStudentsByStudyGroups`('$groupID'); ";
return DB::query(Database::SELECT, $sql)->execute();
}
public function getGrades()
{
$sql = "CALL `GetGrades`(); ";
return DB::query(Database::SELECT, $sql)->execute();
}
public function getStudentsByFaculty($facultyID)
{
$sql = "CALL `GetStudentsByFaculty`('$facultyID'); ";
return DB::query(Database::SELECT, $sql)->execute();
}
public function getGradeID($gradeNum, $degree)
{
$sql = "SELECT `GetGradeID`('$gradeNum', '$degree') AS `ID`; ";
......
......@@ -2,5 +2,21 @@
class Model_DataArr_Students extends Model
{
public function getStudentsByStudyGroups($groupID)
{
$sql = "CALL `GetStudentsByStudyGroups`('$groupID'); ";
return DB::query(Database::SELECT, $sql)->execute();
}
public function getStudentsByFaculty($facultyID)
{
$sql = "CALL `GetStudentsByFaculty`('$facultyID'); ";
return DB::query(Database::SELECT, $sql)->execute();
}
public function getStudentsByGradeID($facultyID, $gradeID)
{
$sql = "CALL `GetStudentsByFaculty`('$facultyID'); ";
return DB::query(Database::SELECT, $sql)->execute();
}
}
......@@ -2,5 +2,16 @@
class Model_DataArr_Teachers extends Model
{
public function getTeachersByFaculty($facultyID)
{
$sql = "CALL `GetTeachersByFaculty`('$facultyID'); ";
return DB::query(Database::SELECT, $sql)->execute();
}
public function getTeachersByDepartment($departamentID)
{
$sql = "CALL `GetTeachersByDepartment`('$departamentID'); ";
return DB::query(Database::SELECT, $sql)->execute();
}
}
......@@ -10,7 +10,8 @@
{% endif %}
<div class="search_item">
<div class="search_item_info">
<div class="search_item_firstLine"><a href="#">{{ row.LastName }} {{ row.FirstName }} {{ row.SecondName }}</a> (1 курс, 1 группа)</div>
<div class="search_item_firstLine">{{ HTML.anchor('admin/profile/student/' ~ row.AccountID,
row.LastName ~ ' ' ~ row.FirstName ~ ' ' ~ row.SecondName)|raw }} ({{ row.Degree }}, {{ row.GradeNum }} курс, {{ row.GroupNum }} группа)</div>
</div>
<div class="search_item_actions">
<a href="#">Редактировать</a>
......
{% extends "admin/base" %}
{% block media %}
{{ HTML.style('media/css/admin/searchBox.css')|raw }}
{{ HTML.script('media/js/admin/students/index.js')|raw }}
{{ HTML.style('media/css/admin/profilePage.css')|raw }}
{{ HTML.script('media/js/admin/students/profile.js')|raw }}
{% endblock %}
{% block title %}Студенты{% endblock %}
{% block main_top_title %}Управление студентами{% endblock %}
{% block title %}Профиль студента{% endblock %}
{% block main_top_title %}Профиль студента{% endblock %}
{% block main_content %}
<div class='search'>
<div class='search_box'>
<div class='search_inputs'>
<div class='search_mainInput'>
<input type='text' placeholder="Поиск по фамилии, имени, отчеству">
</div>
<div class='search_inputFilters'>
<div class='filterLarge'>
<select id="facultySelect">
<option value="0">--- Подразделение ЮФУ ---</option>
{% for row in Faculties %}
<option value="{{ row.ID }}">{{ row.Name }} ({{ row.Abbr }})</option>
{% endfor %}
</select>
</div>
<div class='filter'>
<select id="gradeSelect">
<option value="0">--- Курс ---</option>
{% for Degree in Grades %}
<optgroup label="{{ Degree.Title }}">
{% for Grade in Degree.Grades %}
<option value="{{ Grade.ID }}">{{ Grade.Num }} курс</option>
{% endfor %}
</optgroup>
{% endfor %}
</select>
</div>
<div class='filter'>
<select id="studyGroupSelect">
<option value="0">--- Учебная группа ---</option>
</select>
</div>
</div>
</div>
<div class="profilePage">
<div class="profile_clearFix">
<div class="username">{{ Profile.First }} {{ Profile.Second }} {{ Profile.Last }}</div>
</div>
<div class="profile_clearFix">
<div class="label">Подразделение:</div>
<div class="labeled_info">{{ Profile.FacultyName }}</div>
</div>
<div class="profile_clearFix">
<div class="label">Направление:</div>
<div class="labeled_info">{{ Profile.SpecName }}</div>
</div>
<div class="profile_clearFix profile_delimeter">
<div class="label">Курс, группа:</div>
<div class="labeled_info">{{ Profile.Degree }}, {{ Profile.StudentGrade }} курс, {{ Profile.GroupNum }} группа</div>
</div>
<div class="profile_clearFix">
<div class="label">Тип аккаунта:</div>
<div class="labeled_info">{{ Account.AccRole }}</div>
</div>
<div class="profile_clearFix">
<div class="label">Код активации:</div>
<div class="labeled_info">{{ Account.AccCode|default('<Аккаунт активирован>') }}</div>
</div>
<div class="profile_clearFix">
<div class="label">Имя пользователя:</div>
<div class="labeled_info">{{ Account.AccLogin|default('---') }}</div>
</div>
<div class='search_results'>
<div class='search_results_title' id="search_title">
</div>
<div class='results' id='search_results'>
<div class='search_results_title'>Для отображения списка студентов <b>выберите</b> один из пунктов или <b>введите</b> запрос в поисковое поле.</div>
</div>
<div class="profile_clearFix">
<div class="label">E-Mail:</div>
<div class="labeled_info">{{ Account.AccEMail|default('---') }}</div>
</div>
</div>
<div class="action_bar">
{{ admin.action(URL.site('admin/students/add'), URL.site('media/img/addUser.png'), 'Добавить нового студента', 'Добавить в систему '~System.Title~' нового студента. '~
'Для него будет создан аккаунт и сгенерирован код активации.') }}
{{ admin.action(URL.site('admin/students/upload'), URL.site('media/img/uploadList.png'), 'Загрузить список студентов',
'Загрузить в систему '~System.Title~' список студентов из заранее подготовленных csv-файлов. '~
'Для каждого студента, загруженного данной утилитой, будет создан аккаунт и сгенерирован код активации.') }}
{{ admin.action(URL.site('handler/AdmAccounts/Deactivate/'), URL.site('media/img/addUser.png'),
'Деактивировать аккаунт', 'Прекратить доступ данного аккаунта к системе '~System.Title) }}
</div>
{% endblock %}
\ No newline at end of file
......@@ -10,7 +10,8 @@
{% endif %}
<div class="search_item">
<div class="search_item_info">
<div class="search_item_firstLine"><a href="#">{{ row.LastName }} {{ row.FirstName }} {{ row.SecondName }}</a></div>
<div class="search_item_firstLine">{{ HTML.anchor('admin/profile/teacher/' ~ row.AccountID,
row.LastName ~ ' ' ~ row.FirstName ~ ' ' ~ row.SecondName)|raw }}</div>
<div class="search_item_secondLine">{{ row.JobPositionName }}, {{ row.DepartmentName }}</div>
</div>
<div class="search_item_actions">
......
{% extends "admin/base" %}
{% block media %}
{{ HTML.style('media/css/admin/profilePage.css')|raw }}
{{ HTML.script('media/js/admin/students/profile.js')|raw }}
{% endblock %}
{% block title %}Профиль студента{% endblock %}
{% block main_top_title %}Профиль студента{% endblock %}
{% block main_content %}
<div class="profilePage">
<div class="profile_clearFix">
<div class="username">{{ Profile.First }} {{ Profile.Second }} {{ Profile.Last }}</div>
</div>
<div class="profile_clearFix">
<div class="label">Подразделение:</div>
<div class="labeled_info">{{ Profile.FacultyName }}</div>
</div>
<div class="profile_clearFix">
<div class="label">Кафедра:</div>
<div class="labeled_info">{{ Profile.DepName }}</div>
</div>
<div class="profile_clearFix">
<div class="label">Академичиская должность:</div>
<div class="labeled_info">{{ Profile.JobPositionName }}</div>
</div>
<div class="profile_clearFix">
<div class="label">Тип аккаунта:</div>
<div class="labeled_info">{{ Account.AccRole }}</div>
</div>
<div class="profile_clearFix">
<div class="label">Код активации:</div>
<div class="labeled_info">{{ Account.AccCode|default('<Аккаунт активирован>') }}</div>
</div>
<div class="profile_clearFix">
<div class="label">Имя пользователя:</div>
<div class="labeled_info">{{ Account.AccLogin|default('---') }}</div>
</div>
<div class="profile_clearFix">
<div class="label">E-Mail:</div>
<div class="labeled_info">{{ Account.AccEMail|default('---') }}</div>
</div>
</div>
<div class="action_bar">
{{ admin.action(URL.site('handler/AdmAccounts/Deactivate/'), URL.site('media/img/addUser.png'),
'Деактивировать аккаунт', 'Прекратить доступ данного аккаунта к системе '~System.Title) }}
</div>
{% endblock %}
\ No newline at end of file
......@@ -78,7 +78,8 @@
<div class="itemBlock">
<div class="title">Бонусные баллы:</div>
<div class="field">
<input name="BonusRate" class="BonusRate" type="checkbox"> Добавить ли бонусные баллы?
<input name="BonusRate" class="BonusRate" type="checkbox">
<label>Добавить к УКД</label>
</div>
</div>
</div>
......@@ -86,9 +87,9 @@
<div class="itemBlock">
<div class="title">Форма контроля:</div>
<div class="field">
<input name="ExamType" type="radio" value="exam"> Экзамен
<br><br>
<input name="ExamType" type="radio" value="credit"> Зачет
<input class="InputText" name="ExamType" type="radio" value="exam"> Экзамен
<input class="InputText" name="ExamType" type="radio" value="credit"> Зачет
</div>
</div>
</div>
......
.profile_clearFix
{
padding: 5px;
margin: 0 auto;
}
.profile_clearFix .label
{
float: left;
font-size: 10pt;
width: 200px;
color: #757575;
}
.profile_clearFix .labeled_info
{
font-size: 10pt;
}
.profile_clearFix .username
{
font-weight: 600;
font-size: 14pt;
}
.profile_wrapper .profile_delimeter
{
padding-bottom: 10px;
border-bottom: 1px solid #ccc;
}
\ No newline at end of file
......@@ -56,11 +56,16 @@
display: inline-block;
vertical-align: middle;
height: auto;
width: 49%;
}
.search_item_info
{
width: 70%;
}
.search_item_actions
{
width: 28%;
text-align: right;
}
......
......@@ -494,4 +494,10 @@
margin: 0 1%;
margin-top: 10px;
width: 98%;
}
\ No newline at end of file
}
.InputText {
display: inline-block;
}
\ 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