PSQL 30.10.2024

This commit is contained in:
krivoshein
2024-10-30 15:33:26 +03:00
commit 024cd38bd6
256 changed files with 31332 additions and 0 deletions

View File

@@ -0,0 +1,346 @@
#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;
}