- •Постановка завдання
- •1. Опис використаних технологій
- •1.2. JavaScript
- •1.3. Jquery
- •1.4. Html
- •1.7. Ajax
- •2. Діаграми uml об’єктної моделі системи
- •2.1 Діаграма варіантів використання
- •2.2 Діаграма дій
- •2.3 Діаграма послідовності
- •2.4. Діаграма кооперацій
- •2.5. Діаграми класів
- •2.6. Діаграми станів
- •3. Опис програмної реалізації
- •3.1. Опис серверної частини проекту
- •3.2. Опис клієнтської частини проекту
- •If(!groupInfo.CheckError)
- •If(checkNullUndefined(group))
- •3.3 Реалізація бази даних
- •3.4. Опис реалізованого функціоналу
- •Висновок
- •Список використаної літератури:
- •If(checkNullUndefined(groupId))
- •If(!groupInfo.CheckError)
- •If(!groupInfo.CheckError)
- •If(checkNullUndefined(groupId) && checkNullUndefined(newGroupId))
- •If(checkNullUndefined(groupId))
- •If(checkNullUndefined(studentId))
- •If(checkNullUndefined(studentId))
- •If(checkNullUndefined(studentId))
- •If(!studentInfo.CheckError)
- •If(!studentInfo.CheckError)
- •If(checkNullUndefined(studentId))
- •If(checkNullUndefined(group))
- •If(checkNullUndefined(group))
- •If(checkNullUndefined(student))
- •If(checkNullUndefined)
- •If(item.ClassList.Contains('popupWrapBox'))
If(checkNullUndefined)
{
this.updateStudent(student);
callbackFunc();
}
},
this.basicErrorHandler
);
};
this.deleteStudent = ({studentId}, callbackFunc) =>
{
AjaxController('deleteStudent',
'studentController',
{studentId},
() =>
{
this.geleteStudent(studentId);
callbackFunc();
},
this.basicErrorHandler
);
};
}
/assets/js/views/CommonView.js
function CommonView()
{
this.closeAllPopups = () =>
{
var popups = document.getElementsByClassName('popupBox');
for(let i = 0, len = popups.length; i < len; i++)
{
popups[i].parentNode.style.display = 'none';
}
};
}
/assets/js/views/GroupView.js
function GroupView()
{
this.renderGroupTable = (groupsArr, allGroupsCountStudents, specialityKeys) =>
{
var tableContent = '',
speciality = '',
countStudents = 0,
document = window.document;
groupsArr.forEach((item) =>
{
countStudents = item.id in allGroupsCountStudents ? allGroupsCountStudents[item.id] : 0,
speciality = item.speciality in specialityKeys ? specialityKeys[item.speciality] : '';
tableContent += this.getOneTableRow(item, countStudents, speciality);
});
this.closeAllPopups();
document.getElementById('addButtonBox').getElementsByTagName('button')[0].setAttribute("onclick", "Group.showCreateGroupBox()");
document.getElementById('groupsButton').classList.add('active');
document.getElementById('studentsButton').classList.remove('active');
document.getElementById('studentsTableBox').style.display = 'none';
document.getElementById('groupsTableBox').style.display = 'block';
document.getElementById('groupsTableBox').getElementsByTagName('tbody')[0].innerHTML = tableContent;
};
this.renderCreateGroupBox = () =>
{
var inputs = document.getElementById('createGroup').getElementsByTagName('input');
for(let i = 0, len = inputs.length; i < len; i++)
{
inputs[i].value = '';
}
document.getElementById('createGroup').style.display = 'block';
};
this.renderGroupStudentsTable = (students) =>
{
var tableContent = '';
students.forEach((item) =>
{
tableContent += `<tr>
<td>${item.id}</td>
<td>${item.firstName}</td>
<td>${item.lastName}</td>
<td>${item.birtday}</td>
</tr>`;
});
document.getElementById('groupStudents').style.display = 'block';
document.getElementById('groupStudents').getElementsByTagName('tbody')[0].innerHTML = tableContent;
};
this.renderDeleteGroupShowBox = (groupId) =>
{
var groupBox = document.getElementById('deleteGroup');
groupBox.setAttribute('data-groupid', groupId);
groupBox.style.display = 'block';
};
this.renderEditGroupShowBox = (group) =>
{
var groupId = group.id,
groupBox = document.getElementById('editGroup');
groupBox.querySelector('input[data-type="groupname"]').value = group.name;
groupBox.querySelector('input[data-type="groupcurator"]').value = group.curatorNameLast;
groupBox.querySelector('select[data-type="groupspeciality"]').value = group.speciality;
groupBox.style.display = 'block';
groupBox.setAttribute('data-groupid', groupId);
};
this.renderExchangeGroupShowBox = (groupId, groupsArr) =>
{
var groupBox = '',
selectContent = '';
groupsArr.forEach((item) =>
{
if(item.id !== groupId)
{
selectContent += `<option value="${item.id}">ID: ${item.id} (${item.name})</option>`;
}
});
groupBox = document.getElementById('exchangeGroup');
groupBox.getElementsByTagName('select')[0].innerHTML = selectContent;
groupBox.style.display = 'block';
groupBox.setAttribute('data-groupid', groupId);
};
this.renderEmptyGroupShowBox = (groupId) =>
{
var emptyGroupBox = document.getElementById('emptyGroup');
emptyGroupBox.style.display = 'block';
emptyGroupBox.setAttribute('data-groupid', groupId);
};
this.getOneTableRow = (group, countStudents, speciality) =>
{
return `<tr data-groupid=${group.id} onclick="Group.showGroupStudents(this)">
<td>${group.id}</td>
<td>${group.name}</td>
<td>${group.curatorNameLast}</td>
<td>${speciality}</td>
<td>${countStudents}</td>
<td>
<button class="emptyButton" onclick="event.stopPropagation();Group.emptyGroupShowBox(this)"><i class="fa fa-chain-broken" aria-hidden="true"></i></button>
<button class="exchangeButton" onclick="event.stopPropagation();Group.exchangeGroupShowBox(this)"><i class="fa fa-exchange" aria-hidden="true"></i></button>
<button class="editButton" onclick="event.stopPropagation();Group.editGroupShowBox(this)"><i class="fa fa-pencil" aria-hidden="true"></i></button>
<button class="removeButton" onclick="event.stopPropagation();Group.deleteGroupShowBox(this)"><i class="fa fa-times" aria-hidden="true"></i></button>
</td>
</tr>`;
};
}
/assets/js/views/StudentView.js
function StudentView()
{
this.renderStudentTable = (allUsers, allGroups) =>
{
var tableContent = '',
groupName = '';
if(allUsers && allUsers.length > 0)
{
allUsers.forEach((item) =>
{
groupName = this.getStudentGroupNameById(item.groupId, allGroups);
tableContent += this.getOneTableRow(item, groupName);
});
this.closeAllPopups();
document.getElementById('addButtonBox').getElementsByTagName('button')[0].setAttribute("onclick", "Student.showCreateStudentBox()");
document.getElementById('studentsButton').classList.add('active');
document.getElementById('groupsButton').classList.remove('active');
document.getElementById('studentsTableBox').style.display = 'block';
document.getElementById('groupsTableBox').style.display = 'none';
$('#studentsTableBox tbody').empty().append(tableContent);
}
};
this.renderCreateStudentBox = (groupsIdArr) =>
{
var selectContent = '',
inputs = document.getElementById('createStudents').getElementsByTagName('input');
for(let i = 0, len = inputs.length; i < len; i++)
{
inputs[i].value = '';
}
groupsIdArr.forEach((item) =>
{
selectContent += `<option value="${item.id}">ID: ${item.id} (${item.name})</option>`;
});
document.getElementById('createStudents').querySelector('[data-type="groupid"]').innerHTML = selectContent;
document.getElementById('createStudents').style.display = 'block';
};
this.renderStudentInfoBox = (student) =>
{
var studentInfoBox = document.getElementById('studentInfo');
studentInfoBox.querySelector('input[data-type="userfirst"]').value = student.firstName;
studentInfoBox.querySelector('input[data-type="userlast"]').value = student.lastName;
studentInfoBox.querySelector('input[data-type="usersurname"]').value = student.surName;
studentInfoBox.querySelector('input[data-type="birthday"]').value = student.birtday;
studentInfoBox.querySelector('input[data-type="stydeyear"]').value = student.stydyYear;
studentInfoBox.querySelector('select[data-type="gender"]').value = student.gender;
document.getElementById('studentInfo').style.display = 'block';
};
this.renderEditStudentBox = (student, groupsArr) =>
{
var studentInfoBox = document.getElementById('editStudent'),
selectContent = '';
groupsArr.forEach((item) =>
{
selectContent += `<option value="${item.id}">ID: ${item.id} (${item.name})</option>`;
});
studentInfoBox.querySelector('select[data-type="groupid"]').innerHTML = selectContent;
studentInfoBox.querySelector('input[data-type="userfirst"]').value = student.firstName;
studentInfoBox.querySelector('input[data-type="userlast"]').value = student.lastName;
studentInfoBox.querySelector('input[data-type="usersurname"]').value = student.surName;
studentInfoBox.querySelector('input[data-type="birthday"]').value = student.birtday;
studentInfoBox.querySelector('select[data-type="groupid"]').value = student.groupId;
studentInfoBox.querySelector('select[data-type="gender"]').value = student.gender;
document.getElementById('editStudent').style.display = 'block';
studentInfoBox.setAttribute('data-studentid', student.id);
};
this.renderDeleteUserShowBox = (studentId) =>
{
var studentBox = document.getElementById('deleteStudent');
studentBox.setAttribute('data-studentid', studentId);
studentBox.style.display = 'block';
};
this.getOneTableRow = (student, groupName) =>
{
return `<tr data-studentid="${student.id}" onclick="Student.showStudentInfo(this)">
<td>${student.id}</td>
<td>${student.firstName}</td>
<td>${student.lastName}</td>
<td>${student.groupId !== null ? student.groupId : ''}</td>
<td>${groupName}</td>
<td>${student.birtday}</td>
<td>
<button class="editButton" onclick="event.stopPropagation();Student.editUserShowBox(this)"><i class="fa fa-pencil" aria-hidden="true"></i></button>
<button class="removeButton" onclick="event.stopPropagation();Student.deleteUserShowBox(this)"><i class="fa fa-times" aria-hidden="true"></i></button>
</td>
</tr>`;
};
this.getStudentGroupNameById = (groupId, allGroups) =>
{
var groupName = '';
allGroups.some((item) =>
{
if(item.id === groupId)
{
groupName = item.name;
return true;
}
});
return groupName;
};
}
/assets/js/actions.js
function checkNullUndefined(val)
{
return val !== null && typeof val !== 'undefined';
}
function closePopupBox(item)
{
while ((item = item.parentElement))
{
