From fc7d23d79223754f6d97eb80cc0b37f246cc8cd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=A0=D1=83=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D1=86?= <andrey.rudenets@gmail.com> Date: Mon, 25 Aug 2014 01:20:59 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B0=D0=BD=D0=B5=D0=BB=D1=8C=20=D0=B0?= =?UTF-8?q?=D0=B4=D0=BC=D0=B8=D0=BD=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=20-=20=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=D0=BE?= =?UTF-8?q?=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D0=BD=D0=B0=D0=B4=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=BE=D0=BC=20=D1=81=D1=82?= =?UTF-8?q?=D1=83=D0=B4=D0=B5=D0=BD=D1=82=D0=B0=20+=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B8=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D0=BE=D0=BA=20=D0=BA=20action?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../classes/Controller/Admin/Students.php | 16 ++++- .../classes/Model/Admin/Students.php | 17 +++++ ~dev_rating/application/views/admin/base.twig | 11 +-- .../views/admin/students/index.twig | 67 ++++++++++++++++++ .../views/admin/teachers/index.twig | 10 +-- ~dev_rating/media/css/admin/base.css | 27 +++---- ~dev_rating/media/css/admin/searchBox.css | 8 ++- ~dev_rating/media/img/addUser.png | Bin 0 -> 992 bytes ~dev_rating/media/img/uploadList.png | Bin 0 -> 617 bytes ~dev_rating/media/js/admin/students/add.js | 44 ++++++++++++ ~dev_rating/media/js/admin/students/index.js | 66 +++++++++++++++++ 11 files changed, 242 insertions(+), 24 deletions(-) create mode 100644 ~dev_rating/application/classes/Model/Admin/Students.php create mode 100644 ~dev_rating/media/img/addUser.png create mode 100644 ~dev_rating/media/img/uploadList.png create mode 100644 ~dev_rating/media/js/admin/students/add.js create mode 100644 ~dev_rating/media/js/admin/students/index.js diff --git a/~dev_rating/application/classes/Controller/Admin/Students.php b/~dev_rating/application/classes/Controller/Admin/Students.php index 8da9f568c..ed50127b8 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 000000000..2eb1e2f47 --- /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 05d330112..4c5f366f4 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 e69de29bb..24106f72d 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 1ac60818a..2e9a6ee68 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 b5d56364d..cdc89dc19 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 ad95e4aae..914c825db 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 GIT binary patch literal 992 zcmV<610Vc}P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800004b3#c}2nYxW zd<bNS00009a7bBm000pQ000pQ0l?*=7ytkO8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H116@f(K~z|Ut(VV>n?)GMKhO9kR*J};s@RGYv9@Ro+sVt~We*<o zru49a2#X+ytDqoWRD}Km{yKQJsAs7ttf#W5OH3wf4fY`DLJx|&2v$K|lkhwqc9N!> zzIiiYpG%(1^E}_@JI~BKGq0E#WwNrea?AGi_ETo&frmt-2Xuk2LkM4#0!$GpBhY9x zPMO(<z*2$B#VpI7Z#J7dhfW~R^AoCi1-QKgXS-UhKDfEL`EM!#H_fQ3@6V7N;AF4Y zdn+|LOsPPg=Z~oBHwjq%EXz)$E=6GlRMn>d0hPgE@Ni;GF#$6>lL|IZOd$d1+<nPl z^TZSxRP|~q*gP?X1VrR=GMIDeF+~P5O9nHu?+%SXrBeAGDDTtP<(Ck`?}tX9*=+tL zB3~t7T}(|rl|Ymifx!$oyS-lT%|j>9Znu9hv$xAY%<R=}xBJJT695pA^T4#@b*a<o zd^}HbfUL|Rgz%5|{v)8M#GjA<@!nUQbIYpgMWg{>W^LzOP}PkPLO+Q>ls}6MBJ%f8 z&-1(vTu{|oOguE5Q&oU&p69ErR%>*`OP64Aaq$fBQi0h-<XZsm{hF$_fZ7zenyR+E z_iLjG6kW&O`+G#>4KsTds1yKx5<++;&+~drKJM28E=B!OZmf3SIhVIut;-Vx>h=2F zS(d#HJO@;#%%-QR_dDl)1p<>Z-w7ey87FfMxZ{Am3;59z)M~W_@BMpOmi-K@l_W<* zx?5XYSDkaqH%UH=)SPq68SKCPs@3Y3!0B0|&Fl(HJY4<*u0?%!Y<vgUi~0g_a;oYx z@BLlCCU883{*Zu(G{%;3J%sS&LEjL<siE$@Uk4r=#ya4I)Z{UE)+0PsGT`ZX0?q7f z{A~m0;_&0%``@Cz8$zf7c<+DY`X*c$!)RxK%tJs#&H}^^HypkdICc~FV@#d`oO8he z>+=u*?p<11I<Bf4>>sIA>8k3616~6@CGGJ6z+f<VCxp;<&aDFd1Lg(q{d(MVM-SNg z&biePLVwhV;y2*S?C*(*autb)Jkf5qKa1`4U5dNrC^_&-2;l=LXvML#52)&C5jkmQ zN6qYrh};GoiEeu$vZty)bvm8%uzwk;>II4$Q`b3n!(~+Zb(|`x*YW=Y4||E7%N4f( O0000<MNUMnLSTZe$J7A; literal 0 HcmV?d00001 diff --git a/~dev_rating/media/img/uploadList.png b/~dev_rating/media/img/uploadList.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f674f09466ab719e84f2dce9ed2cff7757e080 GIT binary patch literal 617 zcmV-v0+#)WP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800004b3#c}2nYxW zd<bNS00009a7bBm000pQ000pQ0l?*=7ytkO8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10p>|WK~z|U?U%7@6hRb+zqfmLh08XAt&K(`%@sFr7FwL8jemf} zg<xf2EP~irSr{ZuEW|<r7S^#!=~-NJFne%~5RHF9s<4<G-VV<qvyv1ia|i2Pk=G2o zf&D)C?abR1Ri)GE)bc#v2G)U;YAXkJ(=^@e^?F4Fkmva(u<;+@c*cfjQuECRe*FRL zRxGd%ta#>DDbVoiH*4)ym2_jw9WT%Th^mBz)TO|}1#17=G{)Rj)tkU^mSuYYtyb$k za6J?tB8S%6{#*jUV-e{B2f&_x;8WmXr~vR0m@2T`5dcq|bI+0_ab;sNnLLW3s2&Q4 z<M{X70@m6S;N*O7G#dR1g@@E~M_`P(p{mzZ^>jEKjsV*2_N}5Qu7(0c<j7k4b1nhk zrHFJz<N&x0;GBCSBD0=?wP~Bn9Rcu4Ro|=XY1xS5_<2zj!4p$Nj^-Bd*<HwQFc^Ff zg@@E~M_`P(;+$(FN#gqbeh$!VHj`N|B7dLEE&#lX<G4E>kN=*6dcFRM*=NDpw9Vy? z0QjJ)UxDMYp{j3z&!GSjIh<R-&+!YRG|RFtq41Decm$UM3l}I~!t$$S)fn@lV&>|3 zW+|`_+~e$*>2<{dW$lBHAWhS4V286`=c+3Qc07|mve=x+(n_=o00000NkvXXu0mjf DzI+(u literal 0 HcmV?d00001 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 000000000..565de1b78 --- /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 000000000..4aedadd0e --- /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 -- GitLab