mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-28 19:55:48 +03:00
347 lines
11 KiB
C++
347 lines
11 KiB
C++
#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;
|
||
}
|