diff --git a/~dev_rating/application/classes/Controller/Admin/Students.php b/~dev_rating/application/classes/Controller/Admin/Students.php index 8da9f568ce0eedf920291a03fd95b4dc93a08637..ed50127b882e076d42882ee40ce02abd5b8aa59d 100644 --- a/~dev_rating/application/classes/Controller/Admin/Students.php +++ b/~dev_rating/application/classes/Controller/Admin/Students.php @@ -4,10 +4,22 @@ class Controller_Admin_Students extends Controller_UserEnvi { public function action_index() { + // LOGIC + $model = new Model_Admin_Teachers; + $faculties = $model->getFaculties(); + $facultiesHandled = array(); $i = 0; + foreach($faculties as $row) + { + $i++; + $facultiesHandled[$i]['ID'] = $row['FacultyID']; + $facultiesHandled[$i]['Name'] = $row['FacultyName']; + $facultiesHandled[$i]['Abbr'] = $row['FacultyAbbr']; + } + // VIEW $twig = Twig::factory('admin/students/index'); - + $twig->Faculties = $facultiesHandled; $twig->User = $this->UserInfo; - $this->response->body($twig); + $this->response->body($twig); } public function action_add() diff --git a/~dev_rating/application/classes/Model/Admin/Students.php b/~dev_rating/application/classes/Model/Admin/Students.php new file mode 100644 index 0000000000000000000000000000000000000000..2eb1e2f479aec1d459e0c2653e0f1211bd99a2b9 --- /dev/null +++ b/~dev_rating/application/classes/Model/Admin/Students.php @@ -0,0 +1,17 @@ +<?php defined('SYSPATH') or die('No direct script access.'); + +class Model_Admin_Students extends Model +{ + public function getFaculties() + { + $sql = "CALL `GetFaculties`(); "; + return DB::query(Database::SELECT, $sql)->execute(); + } + + public function getStudyGroups($gradeNum, $facultyID) + { + $sql = "CALL `GetStudyGroups`('$gradeNum', '$facultyID'); "; + return DB::query(Database::SELECT, $sql)->execute(); + } + +} \ No newline at end of file diff --git a/~dev_rating/application/views/admin/base.twig b/~dev_rating/application/views/admin/base.twig index 05d330112394982e7fa253cc2ad7851ed64e3314..4c5f366f4a8932497899305f9c047d2f603d2b92 100644 --- a/~dev_rating/application/views/admin/base.twig +++ b/~dev_rating/application/views/admin/base.twig @@ -9,9 +9,12 @@ </div> {% endmacro %} -{% macro action(URL, title, message) %} +{% macro action(URL, image, title, message, actionID = '') %} <a href="{{ URL }}"> <div class="action"> + <div class="action_image"> + <img src="{{ image }}" /> + </div> <div class="action_content"> <div class="action_title"> {{ title }} @@ -39,14 +42,14 @@ <div class="header_wrapper"> <div class="header"> <div class="top_logo"> - {{ HTML.anchor('/', System.Title, {'title': 'Перейти на главную'})|raw }} + {{ HTML.anchor('/', System.Title~' '~System.Version, {'title': 'Вернуться на сайт'})|raw }} </div> <div class="top_name_faculty"> - {{ HTML.anchor('/admin', System.Title, {'title': 'Перейти на главную'})|raw }} + {{ HTML.anchor('/admin', 'Панель администратора', {'title': 'Перейти на главную'})|raw }} </div> <div class="top_user"> {{ User.First }} {{ User.Last }} | - {{ HTML.anchor('admin/logout', 'Выход из панели администратора', {'title': 'Вернуться на сайт'})|raw }} + {{ HTML.anchor('sign/out', 'Выход', {'title': 'Выход из аккаунта'})|raw }} </div> </div> </div> diff --git a/~dev_rating/application/views/admin/students/index.twig b/~dev_rating/application/views/admin/students/index.twig index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..24106f72dc784d6f86c174a7b220a4db980f48b1 100644 --- a/~dev_rating/application/views/admin/students/index.twig +++ b/~dev_rating/application/views/admin/students/index.twig @@ -0,0 +1,67 @@ +{% extends "admin/base" %} + +{% block media %} +{{ HTML.style('media/css/admin/searchBox.css')|raw }} +{{ HTML.script('media/js/admin/students/index.js')|raw }} +{% 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> + <optgroup label="Бакалавриат"> + <option value="1">1 курс</option> + <option value="2">2 курс</option> + <option value="3">3 курс</option> + <option value="4">4 курс</option> + </optgroup> + <optgroup label="Магистратура"> + <option value="1">1 курс</option> + <option value="2">2 курс</option> + </optgroup> + </select> + </div> + <div class='filter'> + <select id="studyGroupSelect"> + <option value="0">--- Учебная группа ---</option> + </select> + </div> + </div> + </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> + </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-файлов. '~ + 'Для каждого студента, загруженного данной утилитой, будет создан аккаунт и сгенерирован код активации.') }} + </div> +{% endblock %} \ No newline at end of file diff --git a/~dev_rating/application/views/admin/teachers/index.twig b/~dev_rating/application/views/admin/teachers/index.twig index 1ac60818acbab832b605aad03eb528ebcaa0f572..2e9a6ee68b3082e12c5b50181b5da9fed73d3d46 100644 --- a/~dev_rating/application/views/admin/teachers/index.twig +++ b/~dev_rating/application/views/admin/teachers/index.twig @@ -39,13 +39,15 @@ </div> <div class='results' id='search_results'> + <div class='search_results_title'>Для отображения списка преподавателей <b>выберите</b> один из пунктов или <b>введите</b> запрос в поисковое поле.</div> </div> </div> </div> - - {{ admin.action(URL.site('admin/teachers/upload'), 'Загрузить список преподавателей', + <div class="action_bar"> + {{ admin.action(URL.site('admin/teachers/add'), URL.site('media/img/addUser.png'), 'Добавить нового преподавателя', 'Добавить в систему '~System.Title~' нового преподавателя. '~ + 'Для него будет создан аккаунт и сгенерирован код активации.') }} + {{ admin.action(URL.site('admin/teachers/upload'), URL.site('media/img/uploadList.png'), 'Загрузить список преподавателей', 'Загрузить в систему '~System.Title~' список преподавателей из заранее подготовленных csv-файлов. '~ 'Для каждого преподавателя, загруженного данной утилитой, будет создан аккаунт и сгенерирован код активации.') }} - {{ admin.action(URL.site('admin/teachers/add'), 'Добавить нового преподавателя', 'Добавить в систему '~System.Title~' нового преподавателя. '~ - 'Для него будет создан аккаунт и сгенерирован код активации.') }} + </div> {% endblock %} \ No newline at end of file diff --git a/~dev_rating/media/css/admin/base.css b/~dev_rating/media/css/admin/base.css index b5d56364d612994485fb8f74b3ca1bced47c4e2d..cdc89dc19503e9f516b52e9e77860cd9cd5999bc 100644 --- a/~dev_rating/media/css/admin/base.css +++ b/~dev_rating/media/css/admin/base.css @@ -187,6 +187,11 @@ a:hover { /*-------------------------------------ACTION-----------------------------------------*/ +.action_bar +{ + margin-top: 10px; +} + .action { background-color: #ffffff; @@ -200,11 +205,19 @@ a:hover { .action:hover { background-color: #f2f2f2; + text-decoration: none; } -.action_content +.action > div { display: inline-block; + vertical-align: middle; +} + +.action_content +{ + width: 90%; + margin-left: 5px; } .action_title @@ -220,16 +233,8 @@ a:hover { color: #000; } -.action_arrow -{ - display: inline-block; -} - - /*-------------------------------------FOOTER-----------------------------------------*/ - - .footer { box-shadow: 0 0 0 1px #ddd,0 3px 4px -3px #ddd; border-top: 1px solid #ccc; @@ -237,9 +242,7 @@ a:hover { text-align: center; height: 50px; width: 100%; -} - - +} /*--------------------------FUCKING MAGIC!-----------------------------*/ #wrap { diff --git a/~dev_rating/media/css/admin/searchBox.css b/~dev_rating/media/css/admin/searchBox.css index ad95e4aaedd00c819c503bfa8246c50610970812..914c825db4b8507cc551af62b05e0f92c12ed500 100644 --- a/~dev_rating/media/css/admin/searchBox.css +++ b/~dev_rating/media/css/admin/searchBox.css @@ -26,15 +26,19 @@ .search .search_box .search_inputFilters .filter select { padding: 5px; - width: 200px; + width: 202.5px; } .search .search_box .search_inputFilters .filterLarge select { padding: 5px; - width: 400px; + width: 409.5px; } +.search_results_title +{ + padding: 0 10px; +} .search_item { padding: 10px; diff --git a/~dev_rating/media/img/addUser.png b/~dev_rating/media/img/addUser.png new file mode 100644 index 0000000000000000000000000000000000000000..4af0649891f5ec46730b44ca301bcbd4e6761b69 Binary files /dev/null and b/~dev_rating/media/img/addUser.png differ diff --git a/~dev_rating/media/img/uploadList.png b/~dev_rating/media/img/uploadList.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f674f09466ab719e84f2dce9ed2cff7757e080 Binary files /dev/null and b/~dev_rating/media/img/uploadList.png differ diff --git a/~dev_rating/media/js/admin/students/add.js b/~dev_rating/media/js/admin/students/add.js new file mode 100644 index 0000000000000000000000000000000000000000..565de1b7875ce2e5b1a05a0e33e7821e4f9527c8 --- /dev/null +++ b/~dev_rating/media/js/admin/students/add.js @@ -0,0 +1,44 @@ +$(function() +{ + $("#facultySelect [value='0']").attr('selected', 'selected'); + $('#departmentSelect').attr('disabled', 'disabled'); + $("#departmentSelect [value='0']").attr('selected', 'selected'); + $("#jobPositionSelect [value='0']").attr('selected', 'selected'); + // Выбор факультета + $('#facultySelect').change(function(){ + if (($('#facultySelect option:selected').val()!= '0')) { + $("#departmentSelect").html('<option value="0">--- Кафедра ---</option>'); + $('#departmentSelect').attr('disabled', 'disabled'); + $.post('/~dev_rating/handler/admTeachers/getDepartmentsList', {'facultyID': $('#facultySelect option:selected').val()}, function(data){ + $.each(data, function(i){ + $("#departmentSelect").append('<option value="'+data[i].ID+'">'+data[i].Name+'</option>'); + }); + $("#departmentSelect").removeAttr("disabled"); + }, "json"); + } + else + { + $('#departmentSelect').attr('disabled', 'disabled'); + } + }); + + $('#inputGroupSubmit').click(function(){ + $('#inputGroupSubmit').attr('disabled', 'disabled'); + $.post('/~dev_rating/handler/admTeachers/createTeacher', + { + 'firstName': $('#firstName').val(), + 'secondName': $('#secondName').val(), + 'lastName': $('#lastName').val(), + 'jobPositionID': $('#jobPositionSelect option:selected').val(), + 'departmentID': $('#departmentSelect option:selected').val(), + }, + function(data){ + $('.inputGroupMessages').html('<ul>'); + $.each(data.messages, function(i){ + $('.inputGroupMessages').append('<li>' + data.messages[i]); + }); + $('.inputGroupMessages').append('</ul>'); + $('#inputGroupSubmit').removeAttr('disabled'); + }, "json"); + }); +}); \ No newline at end of file diff --git a/~dev_rating/media/js/admin/students/index.js b/~dev_rating/media/js/admin/students/index.js new file mode 100644 index 0000000000000000000000000000000000000000..4aedadd0e85f8336fbe1f9764b3e1d07114d8c50 --- /dev/null +++ b/~dev_rating/media/js/admin/students/index.js @@ -0,0 +1,66 @@ +$(function() +{ + $("#facultySelect [value='0']").attr('selected', 'selected'); + $("#gradeSelect [value='0']").attr('selected', 'selected'); + $("#studyGroupSelect [value='0']").attr('selected', 'selected'); + + $('#gradeSelect').attr('disabled', 'disabled'); + $('#studyGroupSelect').attr('disabled', 'disabled'); + + // Выбор факультета + $('#facultySelect').change(function(){ + if (($('#facultySelect option:selected').val()!= '0')) { + + $("#search_results").html(''); + $('#gradeSelect').removeAttr('disabled'); + $('#studyGroupSelect').attr('disabled', 'disabled'); + $("#studyGroupSelect").html('<option value="0">--- Учебная группа ---</option>'); + + $.post('/~dev_rating/handler/admStudents/getStudentsByFaculty', + { + 'facultyID': $('#facultySelect option:selected').val() + }, + function(data){ + $("#search_results").html(data); + }); + } + else + { + $('#gradeSelect').attr('disabled', 'disabled'); + } + }); + + // Выбор кафедры + $('#gradeSelect').change(function(){ + $("#search_results").html(''); + if (($('#gradeSelect option:selected').val()!= '0')) { + + $.post('/~dev_rating/handler/admStudents/getStudyGroups', + { + 'facultyID': $('#facultySelect option:selected').val(), + 'gradeNum': $('#gradeSelect option:selected').val() + }, + function(data){ + $.each(data, function(i){ + $("#studyGroupSelect").append('<option value="'+data[i].ID+'">'+data[i].Name+'</option>'); + }); + $("#studyGroupSelect").removeAttr("disabled"); + }, "json"); + + } + }); + + // Выбор группы + $('#studyGroupSelect').change(function(){ + $("#search_results").html(''); + if (($('#studyGroupSelect option:selected').val()!= '0')) { + $.post('/~dev_rating/handler/admStudents/getStudentsByStudyGroup', + { + 'studyGroupID': $('#studyGroupSelect option:selected').val() + }, + function(data){ + $("#search_results").html(data); + }); + } + }); +}); \ No newline at end of file