#include <QNetworkProxy>
#include <QNetworkAccessManager>
#include <QNetworkReply>
+#include <QMessageBox>
#include <QDebug>
#include <appsettings.h>
void ImportScheduleWidget::on_delete()
{
- // TODO: implement
+ int active_id = Conference::activeConference();
+ Conference active_conference = Conference::getById(active_id);
+
+ QMessageBox::StandardButton answer =
+ QMessageBox::question(0
+ , "Deletion confirmation"
+ , QString("Really delete the %1 conference").arg(active_conference.title())
+ , QMessageBox::Yes | QMessageBox::No
+ , QMessageBox::No);
+
+ if (answer == QMessageBox::Yes) {
+ QString title = active_conference.title();
+ Conference::deleteConference(active_id);
+ emit(scheduleDeleted(title));
+ }
}
void ImportScheduleWidget::importFromNetwork(const QString& url)
void on_newFromUrl();
signals:
void scheduleImported(int confId);
+ void scheduleDeleted(const QString& title);
private:
void importFromNetwork(const QString& url);
void importData(const QByteArray &aData, const QString& url);
int confId = Conference::activeConference();
connect(importScheduleWidget, SIGNAL(scheduleImported(int)), SLOT(scheduleImported(int)));
+ connect(importScheduleWidget, SIGNAL(scheduleDeleted(const QString&)), SLOT(scheduleDeleted(const QString&)));
// event details have changed
connect(dayTabContainer, SIGNAL(eventHasChanged(int,bool)), SLOT(eventHasChanged(int,bool)));
}
}
+void MainWindow::scheduleDeleted(const QString& title)
+{
+ int idx = selectConference->findText(title);
+
+ if (idx == -1) {
+ // should not happen
+ qWarning() << __PRETTY_FUNCTION__ << "removed non-existent item:" << title;
+ } else {
+ // will it signal "changed"?
+ selectConference->removeItem(idx);
+ }
+}
+
void MainWindow::aboutApp()
{
QDialog dialog(this);
~MainWindow() {}
private slots:
void scheduleImported(int aConfId);
+ void scheduleDeleted(const QString& title);
void aboutApp();
void conferenceMapClicked();
void eventHasChanged(int aEventId, bool aReloadModel);
* fosdem-schedule. If not, see <http://www.gnu.org/licenses/>.
*/
#include "conference.h"
+#include "../sql/sqlengine.h"
QSqlRecord const Conference::sColumns = Conference::toRecord(QList<QSqlField>()
<< QSqlField("id", QVariant::Int)
int Conference::activeConference()
{
- QSqlQuery query("SELECT id FROM conference WHERE active = 1");
- query.exec();
+ {
+ QSqlQuery query("SELECT id FROM conference WHERE active = 1");
+ query.exec();
- QList<int> activeConfs;
- while(query.next())
- activeConfs.append(query.record().value("id").toInt());
+ // TODO: change it so that it will select somw existing ID
- qDebug() << __PRETTY_FUNCTION__
- << "activeConfs.count()" << activeConfs.count()
- ;
+ if (query.next()) {
+ return query.record().value("id").toInt();
+ }
+ }
- if(activeConfs.count()==0) // no active DB
- return 1;
- else // even if there are more active confs, the first from the list is confidered active
- return activeConfs[0];
+ QSqlQuery query2("SELECT id FROM conference ORDER BY id");
+ if (query2.next()) {
+ return query2.record().value("id").toInt();
+ }
+
+ return -1;
+}
+
+void Conference::deleteConference(int id)
+{
+ SqlEngine::deleteConference(id);
}
static Conference getById(int id);
static QList<Conference> getAll();
static int activeConference();
+ static void deleteConference(int id);
public:
int id() const { return value("id").toInt(); }
return execQuery(db, "COMMIT");
}
+void SqlEngine::deleteConference(int id)
+{
+ QSqlDatabase db = QSqlDatabase::database();
+
+ if ( !db.isValid() || !db.isOpen()) {
+ return;
+ }
+
+ beginTransaction();
+
+ QHash<QString, QVariant> params;
+ params["xid_conference"] = id;
+ execQueryWithParameter(db, "DELETE FROM LINK WHERE xid_conference = :xid_conference", params);
+ execQueryWithParameter(db, "DELETE FROM EVENT_ROOM WHERE xid_conference = :xid_conference", params);
+ execQueryWithParameter(db, "DELETE FROM EVENT_PERSON WHERE xid_conference = :xid_conference", params);
+ execQueryWithParameter(db, "DELETE FROM EVENT WHERE xid_conference = :xid_conference", params);
+ execQueryWithParameter(db, "DELETE FROM CONFERENCE WHERE id = :xid_conference", params);
+ execQuery(db, "DELETE FROM ROOM WHERE NOT EXISTS(SELECT * FROM EVENT_ROOM WHERE xid_room = ROOM.id)");
+ execQuery(db, "DELETE FROM PERSON WHERE NOT EXISTS(SELECT * FROM EVENT_PERSON WHERE xid_person = PERSON.id)");
+
+ commitTransaction();
+}
+
bool SqlEngine::execQuery(QSqlDatabase &aDatabase, const QString &aQuery)
{
//qDebug() << "\nSQL: " << aQuery;
}
}
+bool SqlEngine::execQueryWithParameter(QSqlDatabase &aDatabase, const QString &aQuery, const QHash<QString, QVariant>& params)
+{
+ qDebug() << "SQL:" << aQuery << "params:" << params;
+
+ QSqlQuery sqlQuery(aDatabase);
+ sqlQuery.prepare(aQuery);
+ foreach (QString param_key, params.keys()) {
+ sqlQuery.bindValue(param_key, params[param_key]);
+ }
+ if( !sqlQuery.exec() ){
+ qDebug() << "SQL ERR: " << sqlQuery.lastError().number() << ", " << sqlQuery.lastError().text();
+ return false;
+ }
+ else{
+ //qDebug() << "SQL OK.\n";
+ return true;
+ }
+}
+
static void addPersonToDB(QHash<QString,QString> &aPerson);
static void addLinkToDB(QHash<QString,QString> &aLink);
static void addRoomToDB(QHash<QString,QString> &aRoom);
+ static void deleteConference(int id);
static bool beginTransaction();
static bool commitTransaction();
private:
static QString login(const QString &aDatabaseType, const QString &aDatabaseName);
static bool execQuery(QSqlDatabase &aDatabase, const QString &aQuery);
+ static bool execQueryWithParameter(QSqlDatabase &aDatabase, const QString &aQuery, const QHash<QString, QVariant>& params);
};
#endif /* SQLENGINE_H */