#include #include #include #include #include "databaseinstructors.h" DataBaseInstructors::DataBaseInstructors(QString appPath, DataBaseLMS* dbLMS) { appDirPath = appPath; this->dbLMS = dbLMS; if(this->dbLMS != nullptr) LoadInstructorsPSQL(); else LoadInstructorsXML(); } DataBaseInstructors::~DataBaseInstructors() { if(dbLMS == nullptr) SaveInstructorsXML(); } void DataBaseInstructors::LoadInstructorsXML() { QDomDocument instructorsDOM; QString xmlFileName = appDirPath + QStringLiteral("/DBXML/instructors.xml"); QFile xmlInFile(xmlFileName); if (!xmlInFile.open(QFile::ReadOnly | QFile::Text)) { QMessageBox::critical(nullptr, tr("Attention!"), tr("The file could not be opened ") + xmlFileName); qDebug() << QStringLiteral("LoadInstructorsXML: Не удалось открыть файл ") + xmlFileName; return; } else { listOfInstructors.clear(); instructorsDOM.setContent(xmlInFile.readAll()); xmlInFile.close(); QDomNode allInstructorsNode = instructorsDOM.namedItem(QStringLiteral("allInstructors")); for(int i = 0; i < allInstructorsNode.childNodes().count(); i++) { QDomNode instructorNode = allInstructorsNode.childNodes().at(i); if(instructorNode.nodeName().toLower() == QStringLiteral("instructor")) {//Инструктор Instructor instructor; instructor.setName(instructorNode.toElement().attribute(QStringLiteral("name"))); instructor.setLogin(instructorNode.toElement().attribute(QStringLiteral("login"))); instructor.setPassword(instructorNode.toElement().attribute(QStringLiteral("password"))); instructor.setIsAdmin(instructorNode.toElement().attribute(QStringLiteral("isAdmin")) == QStringLiteral("да") ? true : false); instructor.setArchived(instructorNode.toElement().attribute(QStringLiteral("archived")) == QStringLiteral("да") ? true : false); instructor.setLoggedIn(false); listOfInstructors.append(instructor); } }//for(int i = 0; i < allInstructorsNode.childNodes().count(); i++) }//else } void DataBaseInstructors::SaveInstructorsXML() { QDomDocument instructorsDOM; QFile blankFile(QStringLiteral(":/blankXML/instructors.xml")); if (! blankFile.open(QFile::ReadOnly | QFile::Text)) { QMessageBox::critical(nullptr, tr("Attention!"), tr("The file could not be read :/blankXML/instructors.xml")); qDebug() << "SaveInstructorsXML: Не удалось считать файл :/blankXML/instructors.xml"; return; } instructorsDOM.setContent(blankFile.readAll()); blankFile.close(); QDomNode allInstructorsNode = instructorsDOM.namedItem(QStringLiteral("allInstructors")); //Инструкторы for(Instructor instructor : listOfInstructors) { QDomNode instructorNode = instructorsDOM.createElement(QStringLiteral("instructor")); allInstructorsNode.appendChild(instructorNode); instructorNode.toElement().setAttribute(QStringLiteral("name"), instructor.getName()); instructorNode.toElement().setAttribute(QStringLiteral("login"), instructor.getLogin()); instructorNode.toElement().setAttribute(QStringLiteral("password"), instructor.getPassword()); instructorNode.toElement().setAttribute(QStringLiteral("isAdmin"), instructor.getIsAdmin() ? QStringLiteral("да") : QStringLiteral("нет")); instructorNode.toElement().setAttribute(QStringLiteral("archived"), instructor.getArchived() ? QStringLiteral("да") : QStringLiteral("нет")); } QString xmlFileName = appDirPath + QStringLiteral("/DBXML/instructors.xml"); QFile xmlOutFile(xmlFileName); if (!xmlOutFile.open(QFile::WriteOnly | QFile::Text)) { QMessageBox::critical(nullptr, tr("Attention!"), tr("Failed to write the file ") + xmlFileName); qDebug() << QStringLiteral("SaveInstructorsXML: Не удалось записать файл ") + xmlFileName; return; } QTextStream outFile(&xmlOutFile); instructorsDOM.save(outFile, 4); xmlOutFile.close(); } void DataBaseInstructors::LoadInstructorsPSQL() { listOfInstructors.clear(); listOfInstructors = dbLMS->selectAllInstructors(); } bool DataBaseInstructors::AuthorizationInstructor(QString login, QString password) { //Инструкторы for(int i = 0; i < listOfInstructors.count(); i++) { if(listOfInstructors[i].getArchived()) continue; if(listOfInstructors[i].getLogin() == login && listOfInstructors[i].getPassword() == password) { listOfInstructors[i].setLoggedIn(true); return true; } } return false; } bool DataBaseInstructors::deAuthorizationInstructor(QString login) { //Инструкторы for(int i = 0; i < listOfInstructors.count(); i++) { //if(listOfInstructors[i].getArchived()) //continue; if(listOfInstructors[i].getLogin() == login) { listOfInstructors[i].setLoggedIn(false); return true; } } return false; } Instructor DataBaseInstructors::getInstructor(QString name) { //Инструкторы for(int i = 0; i < listOfInstructors.count(); i++) { if(listOfInstructors[i].getName() == name) return listOfInstructors[i]; } return Instructor(); } QString DataBaseInstructors::getNameInstructorByLogin(QString login) { for(Instructor instructor : listOfInstructors) { if(instructor.getLogin() == login) return instructor.getName(); } return QString(QStringLiteral("")); } QString DataBaseInstructors::getAuthorizedInstructorName() { //Инструкторы for(int i = 0; i < listOfInstructors.count(); i++) { if(listOfInstructors[i].getLoggedIn()) return listOfInstructors[i].getName(); } return QStringLiteral(""); } QString DataBaseInstructors::newInstructor() { Instructor instructor; instructor.setName(generateDefaultNameInstructor()); instructor.setLogin(generateDefaultLoginInstructor()); instructor.setPassword(QStringLiteral("")); instructor.setIsAdmin(false); instructor.setArchived(false); instructor.setLoggedIn(false); bool result = dbLMS->insertInstructor(instructor); if(result) { listOfInstructors.append(instructor); return instructor.getName(); } else return QStringLiteral(""); } void DataBaseInstructors::deleteInstructor(QString name) { //Инструкторы for(int i = 0; i < listOfInstructors.count(); i++) { if(listOfInstructors[i].getName() == name) { int id = listOfInstructors[i].getID(); bool result = dbLMS->deleteInstructor(id); if(result) listOfInstructors.removeAt(i); return; } } } void DataBaseInstructors::toArchiveInstructor(QString name) { //Инструкторы for(int i = 0; i < listOfInstructors.count(); i++) { if(listOfInstructors[i].getName() == name) if(! listOfInstructors[i].getArchived()) { Instructor instructor = listOfInstructors[i]; instructor.setArchived(true); bool result = dbLMS->updateInstructor(instructor); if(result) listOfInstructors[i].setArchived(true); } } } void DataBaseInstructors::fromeArchiveInstructor(QString name) { //Инструкторы for(int i = 0; i < listOfInstructors.count(); i++) { if(listOfInstructors[i].getName() == name) if(listOfInstructors[i].getArchived()) { Instructor instructor = listOfInstructors[i]; instructor.setArchived(false); bool result = dbLMS->updateInstructor(instructor); if(result) listOfInstructors[i].setArchived(false); } } } bool DataBaseInstructors::editInstructor(QString name, Instructor instructor) { //Инструкторы for(int i = 0; i < listOfInstructors.count(); i++) { if(listOfInstructors[i].getName() == name) { if( (!checkExistNameInstructor(instructor.getName()) || instructor.getName() == name) && (!checkExistLoginInstructor(instructor.getLogin()) || instructor.getLogin() == listOfInstructors[i].getLogin()) ) { instructor.setID(listOfInstructors[i].getID()); bool result = dbLMS->updateInstructor(instructor); if(result) { listOfInstructors.replace(i, instructor); return true; } else return false; } } } return false; } bool DataBaseInstructors::isAdmin(QString name) { //Инструкторы for(int i = 0; i < listOfInstructors.count(); i++) { if(listOfInstructors[i].getName() == name) return listOfInstructors[i].getIsAdmin(); } return false; } bool DataBaseInstructors::isArchived(QString name) { //Инструкторы for(int i = 0; i < listOfInstructors.count(); i++) { if(listOfInstructors[i].getName() == name) return listOfInstructors[i].getArchived(); } return false; } QString DataBaseInstructors::generateDefaultNameInstructor() { int numInstructor = 0; QString name; do { name = QStringLiteral("<") + tr("Instructor") + QStringLiteral(" ") + QString::number(++numInstructor) + QStringLiteral(">"); }while(checkExistNameInstructor(name)); return name; } bool DataBaseInstructors::checkExistNameInstructor(QString name) { //Инструкторы for(int i = 0; i < listOfInstructors.count(); i++) { if(listOfInstructors[i].getName() == name) return true; } return false; } QString DataBaseInstructors::generateDefaultLoginInstructor() { int numInstructor = 0; QString login; do { login = QStringLiteral(""); }while(checkExistLoginInstructor(login)); return login; } bool DataBaseInstructors::checkExistLoginInstructor(QString login) { //Инструкторы for(int i = 0; i < listOfInstructors.count(); i++) { if(listOfInstructors[i].getLogin() == login) return true; } return false; }