/*
* Copyright (C) 2010 Ixonos Plc.
+ * Copyright (C) 2011 Philipp Spitzer, gregor herrmann
*
- * This file is part of fosdem-schedule.
+ * This file is part of ConfClerk.
*
- * fosdem-schedule is free software: you can redistribute it and/or modify it
+ * ConfClerk is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, either version 2 of the License, or (at your option)
* any later version.
*
- * fosdem-schedule is distributed in the hope that it will be useful, but
+ * ConfClerk is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
- * fosdem-schedule. If not, see <http://www.gnu.org/licenses/>.
+ * ConfClerk. If not, see <http://www.gnu.org/licenses/>.
*/
#include "event.h"
#include "room.h"
<< QSqlField("abstract", QVariant::String)
<< QSqlField("description", QVariant::String));
+Event::Event() :
+ room_(NULL)
+{
+}
Event Event::getById(int id, int conferenceId)
{
return load(query);
}
-QString Event::room() const
+Room* Event::room()
{
- QSqlQuery query;
- // TODO: conference ID isn't used here
- query.prepare("SELECT name FROM room WHERE id = (SELECT xid_room FROM event_room WHERE xid_event = :id)");
- query.bindValue(":id", id());
- query.exec();
- // TODO: handle qeury error
- //qDebug() << query.lastError();
- if(query.next())
- return query.record().value("name").toString();
- else
- return QString("not-available");
+ if (room_ == NULL)
+ {
+ QSqlQuery query;
+ query.prepare("SELECT xid_room FROM event_room WHERE xid_event = :id AND xid_conference = :conf");
+ query.bindValue(":id", id());
+ query.bindValue(":conf", conferenceId());
+ if (!query.isActive())
+ if (!query.exec())
+ throw OrmSqlException(query.lastError().text());
+ if (!query.next())
+ {
+ qDebug() << "No room found for event id: " << id();
+ throw OrmNoObjectException();
+ }
+ int id = query.record().value("xid_room").toInt();
+ room_ = new Room(Room::retrieve(id));
+ }
+ return room_;
}
-int Event::roomId() const
+QString Event::roomName()
{
- QSqlQuery query;
- query.prepare("SELECT xid_room FROM event_room WHERE xid_event = :id");
- query.bindValue(":id", id());
- if (!query.isActive())
- if (!query.exec())
- throw OrmSqlException(query.lastError().text());
- if (!query.next())
- throw OrmNoObjectException();
- return query.record().value("xid_room").toInt();
+ return room()->name();
}
-QStringList Event::persons() const
+int Event::roomId()
{
- QSqlQuery query;
- // TODO: conference ID isn't used here
- query.prepare("SELECT person.name FROM person INNER JOIN event_person ON person.id = event_person.xid_person AND event_person.xid_event = :id");
- query.bindValue(":id", id());
- query.exec();
- // TODO: handle qeury error
- //qDebug() << query.lastError();
-
- QStringList persons;
- while(query.next())
- persons.append(query.record().value("name").toString());
-
- return persons;
+ return room()->id();
}
-QMap<QString,QString> Event::links() const
+QStringList Event::persons()
{
- QSqlQuery query;
- query.prepare("SELECT name,url FROM link WHERE xid_event = :id AND xid_conference = :conf");
- query.bindValue(":id", id());
- query.bindValue(":conf", conferenceId());
- query.exec();
- // TODO: handle qeury error
- //qDebug() << query.lastError();
+ if( mPersonsList.isEmpty() )
+ {
+ QSqlQuery query;
+ query.prepare("SELECT person.name FROM person INNER JOIN event_person ON person.id = event_person.xid_person AND event_person.xid_event = :id AND event_person.xid_conference = :conf1 AND person.xid_conference = :conf2");
+ query.bindValue(":id", id());
+ query.bindValue(":conf1", conferenceId());
+ query.bindValue(":conf2", conferenceId());
+ if (!query.exec()) qDebug() << query.lastError();
+
+ while(query.next())
+ mPersonsList.append(query.record().value("name").toString());
+ }
- QMap<QString,QString> links;
- while(query.next())
- links.insert(query.record().value("name").toString(), query.record().value("url").toString());
+ return mPersonsList;
+}
- return links;
+QMap<QString,QString> Event::links()
+{
+ if ( mLinksList.isEmpty() )
+ {
+ QSqlQuery query;
+ query.prepare("SELECT name,url FROM link WHERE xid_event = :id AND xid_conference = :conf");
+ query.bindValue(":id", id());
+ query.bindValue(":conf", conferenceId());
+ query.exec();
+ // TODO: handle qeury error
+ //qDebug() << query.lastError();
+
+ while(query.next())
+ mLinksList.insert(query.record().value("name").toString(), query.record().value("url").toString());
+ }
+ return mLinksList;
}
bool Event::hasTimeConflict() const
{
QString strQuery = QString("SELECT %1 FROM EVENT INNER JOIN SEARCH_EVENT USING (xid_conference, id) ").arg(columnsForSelect());
strQuery += QString("WHERE xid_conference = :conf AND start >= :start AND start < :end ORDER BY %1").arg(orderBy);
- //qDebug() << strQuery;
+
QList<Event> list;
QSqlQuery query;
try{