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