Files
RRJServer/DBXML/InstructorsAndTrainees/instructors/databaseinstructors.cpp
2024-10-30 15:33:26 +03:00

347 lines
11 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include <QDomDocument>
#include <QFile>
#include <QDebug>
#include <QMessageBox>
#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("<password>"));
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("<I") + QString::number(++numInstructor) + 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;
}