Автоматизація реєстрації користувачів
Active Directory — LDAP-сумісна реалізація інтелектуальної служби каталогів корпорації Microsoft для операційних систем родини Windows NT. Active Directory дозволяє адміністраторам використовувати групові політики (GPO) для забезпечення подібного налаштування користувацького робочого середовища, розгортати ПЗ на великій кількості комп’ютерів (через групові політики або за допомогою Microsoft… Читати ще >
Автоматизація реєстрації користувачів (реферат, курсова, диплом, контрольна)
Вступ
Active Directory — LDAP-сумісна реалізація інтелектуальної служби каталогів корпорації Microsoft для операційних систем родини Windows NT. Active Directory дозволяє адміністраторам використовувати групові політики (GPO) для забезпечення подібного налаштування користувацького робочого середовища, розгортати ПЗ на великій кількості комп’ютерів (через групові політики або за допомогою Microsoft Systems Management Server 2003 (або System Center Configuration Manager)), встановлювати оновлення ОС, прикладного та серверного ПЗ на всіх комп’ютерах в мережі (із використанням Windows Server Update Services (WSUS); Software Update Services (SUS) раніше). Active Directory зберігає дані і налаштування середовища в централізованій базі данних. Мережі Active Directory можуть бути різного розміру: від кількох сотень до кількох мільйонів об'єктів.
Microsoft Windows Server 2008, іноді скорочено «Win2k8» або «W2K8» (кодове ім'я «Longhorn Server») — версія серверної операційної системи від Microsoft. Запущений у виробництво 4 лютого 2008 року і офіційно випущений 27 лютого 2008, він є наступником Windows Server 2003, випущений майже п’ять років тому.
Другий реліз, названий Windows Server 2008 R2, був запущений у виробництво на 22 липня 2009 року. Як Windows Vista і Windows 7, Windows Server 2008 заснований на Windows NT 6.x. Ця версія замінює Windows Server 2003 як представник операційних систем покоління Vista (NT 6. x).
Система призначена для полегшення процесу реєстрації користувачів в базі даних Active Directory.
Система працює з урахування специфіки та політики безпеки Windows Server 2008R2 і Windows Active Directory.
Для автоматизації та оптимізації роботи системних адміністраторів кафедри АСОІУ система підтримує реалізацію таких функцій, що допомагають полегшити процес реєстрації користувачів в базі даних Active Directory:
створення облікового запису в базі даних Active Directory;
заповнення анкети персональних даних користувача;
розповсюдження на обліковий запис, певних групових політик (GPO);
відправка на електронну пошту користувача листа з «Правилами поведінки в аудиторіях кафедри» та «Правилами користування обладнанням кафедри».
Користувач має можливість: ознайомитись з правилами кафедри, заповнити свої персональні дані, переглянути контактну інформацію з технічної підтримкою кафедри.
Адміністратор має можливість: змінити GPO, що розповсюджуються на обліковий запис користувача, змінити параметри облікового запису, вміст листа що відправляється на пошту користувача.
На момент розробки даної системи не було знайдено подібних систем.
Система «Автоматизація реєстрації користувачів» розробляється для полегшення процесу створення облікових записів користувачів в базі даних Active Directory.
Цілями створення даної системи є:
оптимізація роботи системних адміністраторів;
автоматизація створення облікових записів користувачів.
Для реалізації поставлених цілей система повинна рішити наступні задачі:
створення зручного, легкого та зрозумілого у користуванні зовнішнього інтерфейсу;
розробка програми, що буде створювати облікові записи користувачів та наділяти їх відповідними правами.
У даному розділі були розглянуті проаналізовані та поставлені основні цілі для створення системи.
Проведена постановка задачі для системи.
Проведений опис діяльності та описані функціональні можливості системи для автоматизації користувачів Active Directory.
При аналізі існуючих рішень було виявлено та проаналізовано декілька розробок.
Жодна з них повністю не задовольнили вимоги до системи, що і спонукало до створення даної розробки.
Інформаційне забезпечення
Вхідні дані
Дані вводяться в систему користувачем, через веб-сторінку.
Дані, що надходять від користувача:
ім'я;
прізвище;
номер залікової книжки;
пароль;
адреса електронної пошти.
Це дозволяє створити обліковий запис в базі даних Active Directory та заповнити інформацію про користувача.
Вихідні дані
Вихідною інформацією є повідомлення про успішну реєстрацію користувача в базі даних Active Directory та створений обліковий запис користувача.
Висновки до розділу У даному розділі був приведений структурний опис первісних даних системи, запропоновані макети виглядів вигляду веб-сторінки в якості вихідних даних.
Постановка задачі
Організаційно-інформаційна сутність задачі
Спочатку кожного навчального року, першокурсники повинні пройти процес реєстрації особистих облікових записів в базі даних Active Directory, які в подальшому їхньому навчанні будуть використовуватись для роботи в комп’ютерних аудиторія кафедри. Дана програма створена для того, щоб знизити затрати часу на цей процес та підвищити ефективність роботи системних адміністраторів.
Об'єкти представляють собою окремі сутності (користувача, комп’ютер, принтер, програму або спільну мережеву папку) і їх атрибути. Об'єкти також можуть бути контейнерами для інших об'єктів. Об'єкт унікально ідентифікується своїм ім'ям і має набір атрибутів:
характеристик;
даних, які об'єкт може містити.
Програмне та технічне забезпечення
Засоби розробки При створенні даного програмного продукту були використані такі засоби програмування як Microsoft Visual Studio 2010 (ASP .NET) та ScriptEditor.
Для створення програми, що працює даними Active Directory використовувалась мова програмування C#. Головною перевагою C# в створенні даної системи — її пристосованість до роботи з Microsoft AD, а саме легке управління об'єктами бази даних AD.
Для створення графічної оболонки (веб-сторінки) використовувалась мова розмітки HTML/CSS та JavaScript — для динамічної зміні змісту сторінки.
Загальні вимоги до технічного забезпечення Даний програмний продукт являє собою систему, що створює облікові записи користувачів в базі даних AD.
Для правильної роботи програми до складу технічних засобів повинні входити:
a) ПК під управлінням однієї з перелічених операційних систем: Windows XP/Vista/7/8, Linux, Mac OS;
b) Технічні параметри ПК повинні задовольняти перелічені нижче:
Процесор з тактовою частотою не нижче 1.6 ГГц;
Достатній об'єм оперативної пам’яті (не менше 512 МБ);
Широкий канал підключення до мережі Інтернет;
Браузер (Google Chrome, Opera, Mozilla Firefox);
c) Технічні параметри сервера:
Процесор з тактовою частотою не нижче 1.6 ГГц;
Достатній об'єм оперативної пам’яті (не менше 512 МБ);
Широкий канал підключення до мережі Інтернет;
Встановлений IIS Web;
Висновки до розділу Розглянуто основні особливості розробки програм для роботи з AD за допомогою мови програмування C#.
До системи, що розробляється були поставлені мінімальні технічні вимоги для функціонування системи.
Керівництво користувача
Для запуску даної системи потрібно відкрити браузер та перейти за вказаним інтернет адресом. При відкриті веб-сторінки, користувачу буде відображено форму з «Правилами кафедри АСОЇУ». Вигляд даної форми наведено на рисунку 1.
Рисунок 1 — Блок ознайомлення з «Правилами кафедри»
Перехід до блоку заповнення персональної інформації користувача здійснюється після натиснення кнопки «Далі», що знаходиться на правій стороні форми. Після натиснення перед вами з’явиться анкета зображена на рисунку 2.
Правила вводу персональних даних:
Ім'я та Прізвище повинні бути введені латиницею, перші букви мають бути великими;
Номер залікової книжки повинен бути введений в такому форматі: isXXXX/ipXXXX, де is/ip — напрямок навчання, XXXX — номер заліковки;
Пароль повинен містити мінімум 8 символів, серед яких мають бути великі та маленькі літери та цифри;
Рисунок 2 — Блок заповнення персональних даних При наступному натисненні кнопки «Далі» користувач перейде до блоку, де він має засвідчитись, що всі введені ним дані є коректними. Приклад показаний на рисунку 3.
Також користувач має право проходити процедуру реєстрації на англійській мові.
Рисунок 3 — Блок перевірки даних Наступне натискання кнопки «Далі» відправить запит на сервер і якщо дані є вірними створить користувача. Також на електронну адресу користувача буде надіслано повідомлення з його персональними даними та «Правилами кафедри АСОІУ».
користувач програміст керівництво
Керівництво системного програміста
Для коректної роботи системи потрібно:
Технічні параметри сервера:
Процесор з тактовою частотою не нижче 1.6 ГГц;
Достатній об'єм оперативної пам’яті (не менше 512 МБ);
Широкий канал підключення до мережі Інтернет;
На сервері повинна бути встановлена операційна система Windows Server 2008R2 і піднятий сервіс IIS Web.
IIS (Internet Information Services, до версії 5.1 — Internet Information Server) — це набір серверів для декількох служб Інтернету від компанії Майкрософт. IIS поширюється з операційними системами родини Windows NT.
Основний компонент IIS — веб-сервер, який дозволяє розміщувати в Інтернет сайти. IIS підтримує протоколи HTTP, HTTPS, FTP, POP3, SMTP, NNTP. IIS другий за популярністю веб-сервер за кількістю сайтів, після Apache HTTP Server. За даними компанії Netcraft на11.10.2007, понад 37.13% сайтів обслуговується веб-сервером IIS.
Даний сервіс встановлюється з офіційного сайту Microsoft: http://www.microsoft.com/en-us/download/details.aspx?id=1038
Після оснащення сервера вказаним вище програмним забезпеченням на ньому можна розгортати дану систему згідно з інструкціями Windows.
Керівництво програміста
Для створення даної системи використовувались Microsoft Visual Studio 2010 Professional і Sublime 2.
Код мовою C#, що виконує реєстрацію користувачів на сервері:
//========================================
MailMessage mail = new MailMessage ();
SmtpClient SmtpServer = new SmtpClient («smtp.gmail.com»);
mail.From = new MailAddress («[email protected]»);
mail.To.Add (email.Text);
mail.Subject = «Test Mail» ;
mail.Body = «Name: «+ studname. Text + «n Surname: «+ studsurname. Text + «n login: «+ recordbook. Text
+ «n Password: «+ pass. Text;
SmtpServer.Port = 587;
SmtpServer.Credentials =
new System.Net.NetworkCredential («[email protected]», «fiot_asoiu»);
SmtpServer.EnableSsl = true;
SmtpServer.Send (mail);
//AD
//========================================
string connectionPrefix = «LDAP://10.18.16.13» ;
DirectoryEntry dirEntry = new DirectoryEntry (connectionPrefix);
DirectoryEntry newUser = dirEntry.Children.Add («CN=» + studname. Text + «» + studsurname. Text, «user»);
//=======
newUser.Properties[" samAccountName" ]. Value = recordbook. Text;
newUser.Invoke («Put», new object[] { «Description», recordbook. Text });
newUser.Properties[" displayName" ]. Value = studname. Text + «» + studsurname. Text;
newUser.Properties[" givenName" ]. Value = studname. Text;
newUser.Properties[" sn" ]. Value = studsurname. Text;
newUser.Properties[" mail" ]. Value = email. Text;
//=======
newUser.CommitChanges ();
//=======
newUser.Invoke («SetPassword», new object[] { pass. Text });
newUser.Invoke («Put», new object[] { «userPrincipalName», recordbook. Text + «@asoiu.ntu-kpi.kiev.ua» });
//=======
newUser.CommitChanges ();
//=======
PrincipalContext ctx = new PrincipalContext (ContextType.Domain, «10.18.16.13»);
UserPrincipal principal = UserPrincipal. FindByIdentity (ctx, recordbook. Text);
principal.UserCannotChangePassword = true;
principal.Save ();
//=======
newUser.Properties[" userAccountControl" ]. Value = 0×10 002;
newUser.CommitChanges ();
dirEntry.Close ();
newUser.Close ();
MessageBox.Show («Registration was complete»);
Додаткові значення «userAccountControl»:
UF_TEMP_DUPLICATE_ACCOUNT = 0×0100,
UF_NORMAL_ACCOUNT = 0×0200,
UF_INTERDOMAIN_TRUST_ACCOUNT = 0×0800,
UF_WORKSTATION_TRUST_ACCOUNT = 0×1000,
UF_SERVER_TRUST_ACCOUNT = 0×2000,
UF_DONT_EXPIRE_PASSWD = 0×10 000,
UF_SCRIPT = 0×0001,
UF_ACCOUNTDISABLE = 0×0002,
UF_HOMEDIR_REQUIRED = 0×0008,
UF_LOCKOUT = 0×0010,
UF_PASSWD_NOTREQD = 0×0020,
UF_PASSWD_CANT_CHANGE = 0×0040,
UF_ACCOUNT_LOCKOUT = 0X0010,
UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED = 0X0080,
Код форми реєстрації:
function $(str) { return document. querySelector (str) }
function hasClass (el, name)
return new RegExp ('(\s
function addClass (el, name)
{
if (!hasClass (el, name)) { el. className += (el.className? ' ': '') +name; }
}
function removeClass (el, name)
{
if (hasClass (el, name))
el.className=el.className.replace (new RegExp ('(\s
}
function getXmlHttp () {
var xmlhttp;
try {
xmlhttp = new ActiveXObject («Msxml2.XMLHTTP»);
} catch (e) {
try {
xmlhttp = new ActiveXObject («Microsoft.XMLHTTP»);
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest≠'undefined') {
xmlhttp = new XMLHttpRequest ();
}
return xmlhttp;
}
var Scroller = {
posX: 0,
posY: 0,
content: null,
sizeX: 0,
sizeY: 0,
w:0,
h:0,
updatePosition: function (){
with (this) {
content.style.left=-posX*w+'px';
content.style.top=-posY*h+'px';
}
},
left: function (){
with (this) {
posX -= 1;
posX = (posX<0)? 0: posX;
updatePosition ()
}
},
right: function (){
with (this) {
posX += 1;
posX = (posX>sizeX-1)? sizeX-1: posX;
updatePosition ()
}
},
up: function (){
with (this) {
posY -= 1;
posY = (posY<0)? 0: posY;
updatePosition ()
}
},
down: function (){
with (this) {
posY += 1;
posY = (posY>sizeY-1)? sizeY-1: posY;
updatePosition ()
}
},
moveto: function (x, y) {
with (this) {
posY = y
posY = (posY<0)? 0: posY
posY = (posY>sizeY-1)? sizeY-1: posY
posX = x
posX = (posX<0)? 0: posX
posX = (posX>sizeX-1)? sizeX-1: posX
updatePosition ()
}
},
init: function (x, y, sx, sy, width, height, contentSelector){
with (this) {
posX = x;
posY = y;
sizeX = sx;
sizeY = sy;
content = document. querySelector (contentSelector);
content.style.position='relative'
w=width
h=height
}
return this;
}
}
var scroll = null;
function Registration () {
var scriptAddres = 'http://localhost/index.php',
blocks = {},
selectors = {
'rules': '#rules',
'form': '#regBlock',
'formData': '#regFormData',
'langPanel': '#langPanel',
'confirm': '#confirm',
'nextBtn': '#nextBtn',
'canselBtn': '#CancelBtn',
'wait': '#wait',
'supportBtn': '#support',
'supportBlock': '#supportBlock',
'stepBar': '#stepBar',
'procWaiter': '#waiter',
'procError': '#error',
'procSuccess': '#success',
'support': '#supportBlock',
'backBtn': '#backBtn'
},
fieldSelectors = {
'name': '#Name',
'surname': '#SurName',
'group': '#Group',
'pass': '#Pass',
'pass2': '#CPass',
'mail': '#EMail'
},
fields = {},
warningCodes = {
'name': '',
'surname': '',
'group': '',
'pass': '',
'mail': ''
},
languageData = {
'ua': {
'name': 'Ім'я',
'surname': 'Прізвище',
'group': 'Номер залікової книжки',
'pass': 'Пароль',
'pass2': 'Підтвердження паролю',
'mail': 'Електронна пошта',
'emptyName': 'Пусте поле ім'я',
'emptySurName': 'Пусте поле прізвища',
'emptyGroup': 'Пусте поле номера залікової книжки',
'badGroup': 'Некоректний номер залікової книжки',
'emptyPass': 'Пусте поле паролю',
'badPass': 'Некоректний пароль',
'difPass': 'Паролі не збігаються',
'emptyMail': 'Пусте поле електронної пошти',
'badMail': 'Некоректна електронна пошта',
'wait': 'Будь ласка зачекайте',
'step1': 'Правила',
'step2': 'Заповнення даних',
'step3': 'Перевірка даних',
'step4': 'Обробка',
'rules': 'ua rules',
'support': 'ua support'
},
'eng': {
'name': 'Name',
'surname': 'Last name',
'group': 'Number of academic records',
'pass': 'Pass',
'pass2': 'Confirm Password',
'mail': 'Email Address',
'emptyName': 'Empty name',
'emptySurName': 'Empty last name',
'emptyGroup': 'Empty number of academic records',
'badGroup': 'Invalid academic record',
'emptyPass': 'Empty pass',
'badPass': 'bad pass',
'difPass': 'Different pass',
'emptyMail': 'Empty email',
'badMail': 'bad mail',
'wait': 'Please wait',
'step1': 'Rules',
'step2': 'Fill data',
'step3': 'Check data',
'step4': 'Processing',
'rules': 'eng rules',
'support': 'eng support'
}
},
language = 'ua',
mode = 'rules',
timerId = 0,
time = 0;
function hide (el){
el.style.display="none" ;
}
function show (el){
el.style.display="block" ;
}
function isBadStr () {
for (var key in arguments)
if (arguments[key]) return false
return true;
}
function warningCodeGet (value, flagVal, flag){
if (flag === undefined)
return (value)? '': flagVal
else {
if (value)
return (flag)? '': flagVal[0]
else return flagVal[1]
}
}
function checkEmail (){
var mail = fields.mail.value
var reg = /^([A-Za-z0−9_-.])+@([A-Za-z0−9_-.])+.([A-Za-z]{2,4})$/;
warningCodes.mail = warningCodeGet (mail,[languageData[language]['badMail'],
languageData[language]['emptyMail']], reg. test (mail))
return isBadStr (warningCodes.mail)
}
function checkNames (){
warningCodes.name = warningCodeGet (fields.name.value, languageData[language]['emptyName'])
warningCodes.surname = warningCodeGet (fields.surname.value, languageData[language]['emptySurName'])
return isBadStr (warningCodes.name, warningCodes. surname)
}
function checkPass () {
if (fields.pass.value==fields.pass2.value) {
var reg = /[^A-Za-z0−9!@#$%^&*()_±=]/
var flag = !reg.test () && (fields.pass.value.length >= 8)
warningCodes.pass = warningCodeGet (fields.pass.value,[languageData[language]['badPass'], languageData[language]['emptyPass']], flag)
}
else warningCodes. pass = languageData[language]['difPass']
return isBadStr (warningCodes.pass)
}
function checkGroup ()
var group = $(fieldSelectors.group).value.toLowerCase ()
group = group. replace ('с','s')
group = group. replace ('п','p')
group = group. replace ('і','i')
if (group≠fields.group.value)
fields.group.value=group
warningCodes.group = warningCodeGet (group,[languageData[language]['badGroup'],
languageData[language]['emptyGroup']],
(group[0]=='i' && (group[1]=='p'
function check (){
var r = checkNames () + checkGroup () + checkPass () + checkEmail ()
return (r<4)? false: true
}
function removeToolTip (el){
removeClass (el.parentNode.parentNode.querySelector ('.tool-tip'),'tool-tip-show')
addClass (el.parentNode,'input-correct')
}
function addToolTip (el, str){
removeClass (el.parentNode,'input-correct')
addClass (el.parentNode.parentNode.querySelector ('.tool-tip'),'tool-tip-show')
el.parentNode.parentNode.querySelector ('.tool-tip').innerHTML = str;
}
function applyLanguage (e){
if (typeof e ≠ «string») {
language1 = e.target.getAttribute ('data-lang')
}
else language1 = e
language = language1
if (!language) return;
for (var key in fields)
fields[key]. parentNode.parentNode.querySelector ('span').innerHTML = languageData[language][key]
check ()
blocks.rules.innerHTML = languageData[language]['rules']
blocks.support.innerHTML = languageData[language]['support']
for (var key in warningCodes)
fields[key]. parentNode.parentNode.querySelector ('.tool-tip').innerHTML = warningCodes[key]
blocks.stepBar.innerHTML = languageData[language]['step'+(scroll.posX+1)]
blocks.wait.innerHTML = languageData[language]['wait']+' '+time
if (mode=='confirm')
{
blocks.confirm.innerHTML = languageData[language]['name'] + ': ' + fields.name.value + '
' +
languageData[language]['surname'] + ': ' + fields.surname.value + '
' +
languageData[language]['group'] + ': ' + fields.group.value + '
' +
languageData[language]['mail'] + ': ' + fields.mail.value + '
'
}
}
function fieldChecker (e){
check ()
for (var key in warningCodes) {
if (e.target == fields[key] || (key=='pass' && e. target == fields['pass2']))
if (warningCodes[key]) {
addToolTip (fields[key], warningCodes[key])
if (key=='pass') removeClass (fields['pass2']. parentNode,'input-correct')
} else {
removeToolTip (fields[key]);
if (key=='pass') removeToolTip (fields['pass2']);
}
}
}
function waiterLoop (){
if (time == 0) {
blocks.wait.style.display='none'
blocks.nextBtn.disabled = false
clearInterval (timerId)
} else {
blocks.wait.innerHTML = languageData[language]['wait'] + ' ' + time;
time—;
}
}
function init () {
mode = 'rules'
for (var key in selectors)
blocks[key] = $(selectors[key])
for (var key in fieldSelectors)
fields[key] = $(fieldSelectors[key])
blocks.nextBtn.addEventListener ('click', nextBtnClick)
blocks.supportBtn.addEventListener ('click', supportBtnClick)
blocks.formData.addEventListener ('keyup', fieldChecker)
blocks.backBtn.addEventListener ('click', backBtnClick)
applyLanguage (language)
waiterLoop ()
blocks.langPanel.addEventListener ('click', applyLanguage)
timerId = setInterval (waiterLoop, 1000);
}
function supportBtnClick () {
if (scroll.posY==1) scroll. moveto (scroll.posX, 0)
else {
blocks.supportBlock.style.left = (scroll.posX*blocks.supportBlock.offsetWidth)+'px';
scroll.moveto (scroll.posX, 1);
}
}
function send () {
try {
mode="proc"
blocks.nextBtn.disabled = true
blocks.backBtn.disabled = true
var xmlhttp = getXmlHttp () // Создаём объект XMLHTTP
xmlhttp.open ('POST', scriptAddres, true) // Открываем асинхронное соединение
xmlhttp.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded') // Отправляем кодировку
//encodeURIComponent
var data = ''
function dataAdd (key, val) {
if (data) data += '&'
data += encodeURIComponent (key) + '=' + encodeURIComponent (val)
}
for (key in fields) {
if (key≠'pass2')
dataAdd (key, fields[key]. value)
}
hide (blocks.procError)
blocks.procError.style.opacity = 0
hide (blocks.procSuccess)
blocks.procSuccess.style.opacity = 0
//xmlhttp.onreadystatechange
xmlhttp.onreadystatechange = function () { // Ждём ответа от сервера
if (xmlhttp.readyState == 4) { // Ответ пришёл
if (xmlhttp.status == 200) { // Сервер вернул код 200 (что хорошо)
hide (blocks.procWaiter)
//check correct answer
//xmlhttp.responseText — то что вернул сервер
//к примеру если нам пришло число 30, то считаем что ответ некоректный
if (xmlhttp.responseText≠30)
{
blocks.procSuccess.innerHTML = xmlhttp. responseText
show (blocks.procSuccess)
blocks.procSuccess.style.opacity = 1
} else {
blocks.procError.innerHTML = «Incorrect answer»
show (blocks.procError)
blocks.procError.style.opacity = 1
blocks.backBtn.disabled = false;
}
}
}
if (xmlhttp.status == 0) {
hide (blocks.procWaiter)
blocks.procError.innerHTML = «Server don`t response»
show (blocks.procError)
blocks.procError.style.opacity = 1
blocks.backBtn.disabled = false;
}
}
xmlhttp.send (data) // Отправляем POST-запрос
}
catch (e) {
hide (blocks.procWaiter)
blocks.procError.style.opacity = 0
blocks.procSuccess.style.opacity = 0
hide (blocks.procSuccess)
blocks.procError.innerHTML = «Error: «+ e. message
show (blocks.procError)
blocks.procError.style.opacity = 1
blocks.backBtn.disabled = false;
}
}
function nextBtnClick () {
if (scroll.posY==1) scroll. moveto (scroll.posX, 0)
else
if (mode=='rules') {
//check time
mode='fillData'
scroll.moveto (1,0)
} else if (mode=='fillData') {
if (check ())
{
for (var key in warningCodes)
removeToolTip (fields[key])
mode='confirm'
blocks.confirm.innerHTML = languageData[language]['name'] + ': ' + fields.name.value + '
' +
languageData[language]['surname'] + ': ' + fields.surname.value + '
' +
languageData[language]['group'] + ': ' + fields.group.value + '
' +
languageData[language]['mail'] + ': ' + fields.mail.value + '
'
scroll.moveto (2,0)
} else {
for (var key in warningCodes)
if (warningCodes[key]) addToolTip (fields[key], warningCodes[key])
else removeToolTip (fields[key])
}
} else if (mode=='confirm') {
hide (blocks.procError)
hide (blocks.procSuccess)
show (blocks.procWaiter)
scroll.moveto (3,0);
send ()
}
blocks.stepBar.innerHTML = languageData[language]['step'+(scroll.posX+1)]
}
function backBtnClick () {
if (scroll.posY==1) scroll. moveto (scroll.posX, 0)
else
switch (mode) {
case 'rules':
break
case 'fillData':
mode='rules'
scroll.moveto (0,0)
break
case 'confirm':
mode='fillData'
scroll.moveto (1,0)
break
case 'proc':
mode='confirm'
scroll.moveto (2,0)
blocks.nextBtn.disabled = false;
break;
}
blocks.stepBar.innerHTML = languageData[language]['step'+(scroll.posX+1)];
}
init ();
}
window.onload = function (){
scroll = Scroller. init (0,0,4,2,410,416," #scrollerContent")
//document.querySelector ('#leftBtn').addEventListener ('click', function (){ scroll. left () })
Registration ();
//document.querySelector ('#botBtn').addEventListener ('click', function (){ scroll. down () })
//document.querySelector ('#topBtn').addEventListener ('click', function (){ scroll. up () })
}
Висновки
Даний проект присвячений опису етапів створення системи «Автоматизація реєстрації користувачів». Були розглянуті структурний опис первісних даних системи, запропоновані вигляди веб-сторінки в якості вихідних даних.
Під час створення даного проекту було досягнуто всіх цілей поставлених перед початком розробки.
Перелік посилань
1. ASP.NET MVC Framework с примерами на C# Стивен Сандерсон.
2. Pro ASP.NET 3.5 in C# 2008 Matthew MacDonald and Mario Szpuszta
3. Learning JavaScript Shelley Powers 2010
4. Pro JavaScript Techniques John Resig 2009
5. Пости / ASP .NET / Хабрахабр [Електронний ресурс] / Режим доступу: http://habrahabr.ru/hub/aspnet/posts/