/************************************************************************ * $Id: article.cpp 661 2011-04-05 13:16:53Z elzubeir $ * * ------------ * Description: * ------------ * * (C) Copyright 2009-2011 ALLCONTENT. All rights reserved. * * ----------------- * Revision Details: (Updated by Revision Control System) * ----------------- * $Date: 2011-04-05 17:16:53 +0400 (Tue, 05 Apr 2011) $ * $Author: elzubeir $ * $Revision: 661 $ * $HeadURL: file:///opt/svn/socialhose/trunk/app/ClippingStation/article.cpp $ * ************************************************************************/ #include "article.h" #include "publication.h" #include "section.h" #include "imagecutout.h" Article::Article(): m_status(1) { m_imagesNumber = 0; } Article::~Article() { //qDebug("~Article()"); //for(int i=0; i< m_imageCutoutsList.count(); i++) //delete m_imageCutoutsList[i]; //m_imageCutoutsList.clear(); } bool Article::operator == (const Article & pc) { return (this->m_id == pc.m_id); } void Article::setId(int articleId) { m_id = articleId; } void Article::setPagename(QString pagename) { m_pagename = pagename; } void Article::setImageCutouts(QList cutoutsList) { m_imageCutoutsList = cutoutsList; } void Article::updateImageCutouts(QSqlDatabase &database, QList cutoutsList) { //the easit way to do it is to delete all the old clipping coordinates, and insert new ones QSqlQuery query(database); query.prepare("DELETE FROM clipping_coordinates WHERE id_article = :id_article"); query.bindValue(":id_article", m_id); if(!query.exec() ) { qDebug() << query.lastError().text().toAscii(); qDebug() << "\t...." << query.lastError().databaseText(); } //now just insert the new ones setCippingCoordinates(database, m_id, cutoutsList); m_imageCutoutsList = cutoutsList; } void Article::setTags(QList &tags) { m_tags = tags; } void Article::updateTags(QSqlDatabase &database, QList &tags, bool isArabic) { //if(tags == m_tags) // return; //here, we either have tags added, removed, or added and removed QList addedTags; //check for new added tags; foreach (Tag tag, tags) { if( !m_tags.contains(tag) ) addedTags.append(tag); } QList removedTags; foreach(Tag tag, m_tags) { if(!tags.contains(tag)) { m_tags.removeOne(tag); removedTags.append(tag); } } m_tags.append(addedTags); if(removedTags.count() > 0) { //we will remov tags from database QSqlQuery query(database); query.prepare("DELETE FROM article_company WHERE id_article = :id_article AND id_company = :id_company"); query.bindValue(":id_article", m_id); for(int i=0; i< removedTags.count(); i++) { query.bindValue(":id_company", removedTags[i].id()); if(!query.exec() ) { qDebug() << query.lastError().text().toAscii(); qDebug() << "\t...." << query.lastError().databaseText(); } } //also remove all the accombining prominence values query.prepare("DELETE FROM prominence WHERE id_article = :id_article AND id_company = :id_company"); query.bindValue(":id_article", m_id); for(int i=0; i< removedTags.count(); i++) { query.bindValue(":id_company", removedTags[i].id()); if(!query.exec() ) { qDebug() << query.lastError().text().toAscii(); qDebug() << "\t...." << query.lastError().databaseText(); } } } if(addedTags.count() > 0) { //we will add tags from database QSqlQuery query(database); query.prepare("INSERT INTO article_company (id_article, id_company, coordinates) VALUES (:id_article, :id_company, :coordinates)"); query.bindValue(":id_article", m_id); for(int i=0; i< addedTags.count(); i++) { query.bindValue("id_company", addedTags[i].id()); query.bindValue(":coordinates", addedTags[i].coordinates()); if(!query.exec() ) { qDebug() << query.lastError().text().toAscii(); qDebug() << "\t...." << query.lastError().databaseText(); } } } //we need to update the towrite flag as well //get the max value from tags int towrite = 0; for(int i=0; i< m_tags.count(); i++) { if(towrite < m_tags[i].towrite()) towrite = m_tags[i].towrite(); } for(int i=0; i< addedTags.count(); i++) { if(towrite < addedTags[i].towrite()) towrite = addedTags[i].towrite(); } if(towrite > 0) setArticleTowrite(database, m_id, towrite, isArabic); m_tags = tags; } void Article::setImagesNumber(int imagesNumber) { m_imagesNumber = imagesNumber; } void Article::updateImagesNumber(QSqlDatabase &database, int images_number) { m_imagesNumber = images_number; QSqlQuery query(database); query.prepare("UPDATE article SET images_number = :images_number WHERE id_article = :id_article"); query.bindValue(":images_number", images_number); query.bindValue(":id_article" , m_id); if(!query.exec() ) { qDebug() << query.lastError().text().toAscii(); qDebug() << "\t...." << query.lastError().databaseText(); } } void Article::updateImagesNumber(QSqlDatabase &database, int articleId, int images_number) { QSqlQuery query(database); query.prepare("UPDATE article SET images_number = :images_number WHERE id_article = :id_article"); query.bindValue(":images_number", images_number); query.bindValue(":id_article" , articleId); if(!query.exec() ) { qDebug() << query.lastError().text().toAscii(); qDebug() << "\t...." << query.lastError().databaseText(); } } void Article::setImagesLocalPath(QHash path) { m_imagesLocalPath = path; } void Article::setImagesRemotePath(QHash path) { m_imagesRemotePath = path; } void Article::setStatus(int status) { m_status = status; } void Article::updateStatus(QSqlDatabase &database, int status) { QSqlQuery query(database); query.prepare("UPDATE article set clipping_status = :clipping_status WHERE id_article = :id_article"); query.bindValue(":clipping_status" , status); query.bindValue(":id_article" , m_id); if ( !query.exec() ) qDebug() << query.lastError().text().toAscii(); } void Article::updateStatus(QSqlDatabase &database, int articleId, int status) { qDebug("updateStatus() for article %d", articleId); QSqlQuery query(database); query.prepare("UPDATE article set clipping_status = :clipping_status WHERE id_article = :id_article"); query.bindValue(":clipping_status" , status); query.bindValue(":id_article" , articleId); if ( !query.exec() ) qDebug() << query.lastError().text().toAscii(); qDebug("end of updateStatus() for article %d", articleId); } void Article::updateHeadline(QSqlDatabase &database, int id, QString headline, bool isArabic) { QSqlQuery query(database); if(isArabic) query.prepare("UPDATE article set headline_ar = :headline WHERE id_article = :id"); else query.prepare("UPDATE article set headline_en = :headline WHERE id_article = :id"); query.bindValue(":headline", headline); query.bindValue(":id_article", id); if ( !query.exec() ) qDebug() << "updateHeadline() error: " << query.lastError().text().toAscii(); } void Article::updateText(QSqlDatabase &database, int id, QString text) { QSqlQuery query(database); query.prepare("UPDATE article set text_ocr = :text WHERE id_article = :id_article"); query.bindValue(":text" , text); query.bindValue(":id_article", id); if ( !query.exec() ) { qDebug() << "updateText() error: " << query.lastError().text().toAscii(); qDebug() << "text is " << text; } } void Article::deleteArticle(QSqlDatabase &database) { QSqlQuery query(database); query.prepare("DELETE FROM article WHERE id_article = :id_article"); query.bindValue(":id_article" , m_id); if ( !query.exec() ) { qDebug() << query.lastError().text().toAscii(); qDebug() << "\t...." << query.lastError().databaseText(); } query.prepare("DELETE FROM article_company WHERE id_article = :id_article"); query.bindValue(":id_article" , m_id); if ( !query.exec() ) { qDebug() << query.lastError().text().toAscii(); qDebug() << "\t...." << query.lastError().databaseText(); } query.prepare("DELETE FROM clipping_coordinates WHERE id_article = :id_article"); query.bindValue(":id_article" , m_id); if ( !query.exec() ) { qDebug() << query.lastError().text().toAscii(); qDebug() << "\t...." << query.lastError().databaseText(); } } void Article::deleteArticle(QSqlDatabase &database, int articleId) { QSqlQuery query(database); query.prepare("DELETE FROM article WHERE id_article = :id_article"); query.bindValue(":id_article" , articleId); query.exec(); query.prepare("DELETE FROM article_company WHERE id_article = :id_article"); query.bindValue(":id_article" , articleId); query.exec(); query.prepare("DELETE FROM clipping_coordinates WHERE id_article = :id_article"); query.bindValue(":id_article" , articleId); query.exec(); } int Article::id() { return m_id; } QList Article::imageCutoutsList() { return m_imageCutoutsList; } QList Article::tags() { return m_tags; } int Article::imagesNumber() { return m_imagesNumber; } int Article::status() { return m_status; } QStringList Article::pageNames() { QList keys = m_imagesLocalPath.keys(); QStringList list(keys); list.sort(); return list; } void Article::getImagesLocalAndRemoateFiles(QStringList &localpaths, QStringList &remotepaths) { localpaths.clear(); //clear the list remotepaths.clear(); foreach (QString key, m_imagesLocalPath.keys() ) { localpaths.append(m_imagesLocalPath [key]); remotepaths.append(m_imagesRemotePath[key]); } localpaths.sort(); remotepaths.sort(); } bool Article::updateArticle(QSqlDatabase &database, Publication &publication, QList &tags, QList &cutoutsList, qreal imageSize) { QSqlQuery queryMaster(database); queryMaster.prepare("UPDATE article SET headline_en = :headline_en, " "page_number = :page_number, " "size = :size, ave = :ave, real_size = :real_size, size_l = :size_l, size_w = :size_w WHERE id_article =:id_article "); QString headline_en = Tag::headlineEnglish(tags); QString page_number = ImageCutout::pages(cutoutsList); qreal size_l; qreal size_w; qreal size; qreal real_size; getSize(publication, imageSize, size_l, size_w, size, real_size, cutoutsList); qreal ave = calculateAVE(publication.isMagazine(), publication.adRate(), size, real_size, true); queryMaster.bindValue(":id_article", m_id); queryMaster.bindValue(":headline_en", headline_en); queryMaster.bindValue(":page_number", page_number); queryMaster.bindValue(":size", size); queryMaster.bindValue(":ave", ave); queryMaster.bindValue(":real_size", real_size); queryMaster.bindValue(":size_l", size_l); queryMaster.bindValue(":size_w", size_w); if(!queryMaster.exec()) { qDebug() << "Sql Error (updateArticle): " << queryMaster.lastError().text().toAscii(); return false; } bool isArabic = (publication.language() == "Arabic"); updateTags(database, tags, isArabic); updateImageCutouts(database, cutoutsList); return true; } QList
Article::preclippedArticles(QSqlDatabase &database, int publicationId, int issueNumber, QString &localIssuePath, QString &remoteIssuePath) { return articles(database, publicationId, issueNumber, localIssuePath, remoteIssuePath, 1); } QList
Article::clippedArticles (QSqlDatabase &database, int publicationId, int issueNumber, QString &localIssuePath, QString &remoteIssuePath) { return articles(database, publicationId, issueNumber, localIssuePath, remoteIssuePath, 2); } QList
Article::articles(QSqlDatabase &database, int publicationId, int issueNumber, QString &localIssuePath, QString &remoteIssuePath, int clipping_status) { QSqlQuery query(database); query.prepare("SELECT pc.id_article, pc.id_article_section, pc.page_number, pc.type, pc.x, pc.y, pc.width, pc.height, ar.images_number, pc.id_clipping_table " "FROM clipping_coordinates as pc, article as ar " "WHERE pc.id_article = ar.id_article AND ar.id_publication = :id_publication AND ar.issue_number = :issue_number and clipping_status = :clipping_status " " AND ar.reject != 1 " " ORDER BY pc.id_article"); query.bindValue(":id_publication", publicationId); query.bindValue(":issue_number", issueNumber); query.bindValue(":clipping_status", clipping_status); if( !query.exec() ) { qDebug() << query.lastError().text(); return QList
(); } QList
list; int tmpId = -1; int articleId = 0; int count = 0; Article pc; QList cutoutsList; QHash localpath; QHash remotepath; bool found = false; while( query.next() ) { //qDebug("Iterator %d", counter++); tmpId = query.value(0).toInt(); int sectionId = query.value(1).toInt(); QString pagename = query.value(2).toString(); pagename = QString("%1").arg(pagename, 4, QChar('0')); if (!pagename.endsWith(".jpg") ) pagename += ".jpg"; int type = query.value(3).toInt(); int x = query.value(4).toInt(); int y = query.value(5).toInt(); int w = query.value(6).toInt(); int h = query.value(7).toInt(); int imagesNumber = query.value(8).toInt(); int clippingId = query.value(9).toInt(); if( tmpId != articleId) { found = true; if(count != 0) { pc.setImageCutouts(cutoutsList); QList tags = Tag::loadArticleTags(database, articleId); pc.setTags(tags); pc.setImagesLocalPath(localpath); pc.setImagesRemotePath(remotepath); list.append(pc); cutoutsList.clear(); localpath.clear(); remotepath.clear(); } articleId = tmpId; pc.setId(articleId); pc.setImagesNumber(imagesNumber); //cutoutsList.clear(); //pc.setImageCutouts(cutoutsList); count++; } QString localPagename = localIssuePath + QString("%1/%2").arg(sectionId).arg(pagename); QString remotePagename = remoteIssuePath+ QString("%1/%2").arg(sectionId).arg(pagename); QString sectionPagename = Section::sectionName(database, sectionId) + "/" + pagename; localpath [sectionPagename] = localPagename; remotepath[sectionPagename] = remotePagename; SELECTION_AREA_TYPE stype = static_cast (type); ImageCutout * rect = new ImageCutout(clippingId, QPolygonF(QRectF(x, y, w, h)), 0, localPagename, stype); cutoutsList.append(rect); } if(found) { pc.setImageCutouts(cutoutsList); QList tags = Tag::loadArticleTags(database, articleId); pc.setTags(tags); pc.setImagesLocalPath(localpath); pc.setImagesRemotePath(remotepath); list.append(pc); } return list; } int Article::clip(QSqlDatabase &database, Publication &publication, int created_by, QList &tags, QList &cutoutsList, QString section, qreal image_size, int images_number, int clipping_status, QString text_ocr) { QSqlQuery queryMaster(database); queryMaster.prepare("INSERT INTO article ( headline_en, publication_date, issue_number, id_publication, " "id_article_type, created_by, created, section, circulation, images_number, page_number, " "size, id_article_section, ave, real_size, clipping_status, size_l, size_w, id_zissor) " "VALUES" " (:headline_en, :publication_date, :issue_number, :id_publication, " ":id_article_type, :created_by, NOW(), :section, :circulation, :images_number, :page_number, " ":size, :id_article_section, :ave, :real_size, :clipping_status, :size_l, :size_w, :id_zissor) "); QString headline_en = Tag::headlineEnglish(tags); QString publication_date = publication.currentIssue()->date(); int issue_number = publication.currentIssue()->id(); int id_publication = publication.id(); int id_article_type = publication.type(); int circulation = publication.circulation(); int id_article_section = publication.currentIssue()->section(section).id(); int id_zissor = 1; QString page_number = ImageCutout::pages(cutoutsList); qreal size_l; qreal size_w; qreal size; qreal real_size; getSize(publication, image_size, size_l, size_w, size, real_size, cutoutsList); qreal ave = calculateAVE(publication.isMagazine(), publication.adRate(), size, real_size, true); queryMaster.bindValue(":headline_en", headline_en); queryMaster.bindValue(":publication_date", publication_date); queryMaster.bindValue(":issue_number", issue_number); queryMaster.bindValue(":images_number", images_number); queryMaster.bindValue(":id_publication", id_publication); queryMaster.bindValue(":id_article_type", id_article_type); queryMaster.bindValue(":created_by", created_by); queryMaster.bindValue(":section", section); queryMaster.bindValue(":page_number", page_number); queryMaster.bindValue(":circulation", circulation); queryMaster.bindValue(":size", size); queryMaster.bindValue(":id_article_section", id_article_section); queryMaster.bindValue(":ave", ave); queryMaster.bindValue(":real_size", real_size); queryMaster.bindValue(":clipping_status", clipping_status); queryMaster.bindValue(":size_l", size_l); queryMaster.bindValue(":size_w", size_w); queryMaster.bindValue(":id_zissor", id_zissor); //queryMaster.bindValue(":text_ocr", text_ocr); if(!queryMaster.exec()) { qDebug() << queryMaster.lastQuery().toAscii(); //QMessageBox::critical(this, tr("SQL Error"), queryMaster.lastError().databaseText()); return -1; } int id_article = 0; QVariant var = queryMaster.lastInsertId(); if(var.isValid()) id_article = var.toInt(); Tag::setArticleTags(database, id_article, tags); insertPromience(database, publication, id_article, tags, created_by); //insert into the clipping coordinates table setCippingCoordinates(database, id_article, cutoutsList); //insert towrite flag //get highest to write value int towrite = 0; for(int i=0; i 0) { bool isArabic = (publication.language() == "Arabic"); setArticleTowrite(database, id_article, towrite, isArabic); } return id_article; } void Article::getSize(Publication &publication, qreal image_size, qreal &size_l, qreal &size_w, qreal &size, qreal &real_size, QList &cutoutsList) { size_l = size_w = size = real_size = 0.0; qreal width, height;//, tmpsize = 0.0; QHash sizes; if(publication.isMagazine()) { QStringList tmpCount; for(int i=0; i< cutoutsList.count(); i++) { width = (cutoutsList[i]->boundingRect().width()/DPI) * 2.54; height = (cutoutsList[i]->boundingRect().height()/DPI) * 2.54; size_w += width; size_l += height; //tmpsize += (size_w * size_l); qreal tmpsize = (width * height) / image_size; //qDebug() << cutoutsList[i]->pageName().toAscii(); //qDebug("\t%.2f", tmpsize); if(!tmpCount.contains(cutoutsList[i]->pageName()) ) { tmpCount.append(cutoutsList[i]->pageName() ); sizes[cutoutsList[i]->pageName()] = tmpsize; } else sizes[cutoutsList[i]->pageName()]+= tmpsize; } size = tmpCount.count(); foreach ( QString key, sizes.keys() ) real_size += sizes[key]; } else { qreal columnWidth = publication.columnWidth(); if(!columnWidth) columnWidth = NEWSPAPER_COLUMN_WIDTH; for(int i=0; i< cutoutsList.count(); i++) { width = (cutoutsList[i]->boundingRect().width()/DPI) * 2.54; height = (cutoutsList[i]->boundingRect().height()/DPI) * 2.54; size_w += width; size_l += height; width /= columnWidth; size += width * height; } } } qreal Article::calculateAVE(bool isMagazine, qreal adrate, qreal size, qreal real_size, bool round) { if (isMagazine) { if (adrate > 0 ) { if(round) { float ss = roundf(real_size*100.0f)/100.0f; return ss * adrate; } else return real_size * adrate; } else return 0.0; } else { if ( adrate > 0 ) return size * adrate; else return 0.0; } } void Article::setCippingCoordinates(QSqlDatabase &database, int id_article, QList &cutoutsList) { QSqlQuery query(database); query.prepare("INSERT INTO clipping_coordinates (id_article, id_article_section, page_number, type, x, y, width, height) " "VALUES (:id_article, :id_article_section, :page_number, :type, :x, :y, :w, :h)"); query.bindValue(":id_article", id_article); //The name is in the format of // /socialhose/app/ClippingStation/cach/2009/09/10/162/9/0001.jpg for(int i=0; i< cutoutsList.count(); i++) { QString page = cutoutsList[i]->pageName(); int index = page.lastIndexOf("/"); int index2 = page.lastIndexOf("/", index-1); int pagenumber = page.right(page.length()-index-1).replace(".jpg", "").toInt(); //int pagenumber2 = cutoutsList[i]->pageNumber().toInt(); QString page_number = QString("%1").arg(pagenumber); int id_section = page.mid(index2+1, abs(index2-index)-1).toInt(); //int id_section2 = cutoutsList[i]->sectionNumber(); int x = static_cast (cutoutsList[i]->boundingRect().topLeft().x()); int y = static_cast (cutoutsList[i]->boundingRect().topLeft().y()); int w = static_cast (cutoutsList[i]->boundingRect().width()); int h = static_cast (cutoutsList[i]->boundingRect().height()); int type = cutoutsList[i]->areaType(); query.bindValue(":id_article_section", id_section); query.bindValue(":page_number", page_number); query.bindValue(":type", type); query.bindValue(":x", x); query.bindValue(":y", y); query.bindValue(":w", w); query.bindValue(":h", h); if (!query.exec()) { qDebug() << "Error (clipping coordinates): "<< query.lastError().databaseText().toAscii(); } } } void Article::setArticleTowrite(QSqlDatabase &database, int idArticle, int toWrite, bool isArabic) { //advert_summary = 1 int idSummary = 1; if(toWrite == 1) { QSqlQuery queryPublish(database); queryPublish.prepare("UPDATE article SET published=1, published_by=1, published_date=NOW(), id_summary=:id_summary WHERE id_article=:id_article AND towrite=0"); queryPublish.bindValue(":id_summary", idSummary); queryPublish.bindValue(":id_article", idArticle); if (!queryPublish.exec()) { } qDebug("setArticleTowrite(): [tag:1] Set article %d as published", idArticle); } else if(toWrite == 2) { QSqlQuery queryToWrite(database), queryUnpublish(database); queryToWrite.prepare("UPDATE article SET towrite=1 WHERE id_article=:id_article"); queryToWrite.bindValue(":id_article", idArticle); queryUnpublish.prepare("UPDATE article SET published=0, published_by=0, published_date='0000-00-00', id_summary=0 WHERE id_article=:id_article AND published_by=1 AND towrite=1"); queryUnpublish.bindValue(":id_article", idArticle); queryToWrite.exec(); queryUnpublish.exec(); qDebug("setArticleTowrite(): [tag:2] Set towrite and unpublished article %d", idArticle); } else if(toWrite == 3) { if(isArabic) { QSqlQuery queryToWrite(database), queryUnpublish(database); queryToWrite.prepare("UPDATE article SET towrite=1 WHERE id_article=:id_article"); queryToWrite.bindValue(":id_article", idArticle); queryUnpublish.prepare("UPDATE article SET published=0, published_by=0, published_date='0000-00-00', id_summary=0 WHERE id_article=:id_article AND published_by=1 AND towrite=1"); queryUnpublish.bindValue(":id_article", idArticle); queryToWrite.exec(); queryUnpublish.exec(); qDebug("setArticleTowrite(): [tag:3] Set towrite and unpublished article %d", idArticle); } } else qDebug("setArticleTowrite(): This is not supposed to happen."); } Article Article::article(QSqlDatabase &database, int articleId, QString &localIssuePath, QString &remoteIssuePath) { QSqlQuery query(database); query.prepare("SELECT pc.id_article, pc.id_article_section, pc.page_number, pc.type, pc.x, pc.y, pc.width, pc.height, ar.images_number, pc.id_clipping_table " "FROM clipping_coordinates as pc, article as ar " "WHERE pc.id_article = ar.id_article AND ar.id_article = :id_article"); query.bindValue(":id_article", articleId); if( !query.exec() ) { qDebug() << query.lastError().databaseText(); return Article(); } int tmpId = -1, tmpId2 = 0; Article pc; QList cutoutsList; QHash localpath; QHash remotepath; bool found = false; while( query.next() ) { //qDebug("Iterator %d", counter++); tmpId = query.value(0).toInt(); int sectionId = query.value(1).toInt(); QString pagename = query.value(2).toString(); pagename = QString("%1").arg(pagename, 4, QChar('0')); if (!pagename.endsWith(".jpg") ) pagename += ".jpg"; int type = query.value(3).toInt(); int x = query.value(4).toInt(); int y = query.value(5).toInt(); int w = query.value(6).toInt(); int h = query.value(7).toInt(); int imagesNumber = query.value(8).toInt(); int clippinId = query.value(9).toInt(); if( tmpId != tmpId2) { found = true; tmpId2 = tmpId; articleId = tmpId; pc.setId(articleId); pc.setImagesNumber(imagesNumber); } QString localPagename = localIssuePath + QString("%1/%2").arg(sectionId).arg(pagename); QString remotePagename = remoteIssuePath+ QString("%1/%2").arg(sectionId).arg(pagename); QString sectionPagename = Section::sectionName(database, sectionId) + "/" + pagename; localpath [sectionPagename] = localPagename; remotepath[sectionPagename] = remotePagename; SELECTION_AREA_TYPE stype = static_cast (type); ImageCutout * rect = new ImageCutout(clippinId, QPolygonF(QRectF(x, y, w, h)), 0, localPagename, stype); cutoutsList.append(rect); } if(found) { pc.setImageCutouts(cutoutsList); QList tags = Tag::loadArticleTags(database, articleId); pc.setTags(tags); pc.setImagesLocalPath(localpath); pc.setImagesRemotePath(remotepath); } return pc; } void Article::insertPromience(QSqlDatabase &database, Publication &publication, int idArticle, QList &tags, int createdBy) { qDebug("insertPromience()"); QSqlQuery query(database); query.prepare("INSERT INTO prominence (id_company, id_article, mention_score, visual_score, " "tone_score, created_by, created, size_cc, size_page, ave, note) " " VALUES (:id_company, :id_article, :mention_score, :visual_score, " ":tone_score, :created_by, NOW(), :size_cc, :size_page, :ave, :note )"); query.bindValue(":id_article", idArticle); for(int i=0; i < tags.count(); i++) { Tag t = tags[i]; if(t.prominence().m_size <= 0) { qDebug ("Prominance for Tag (%d) has a value of zero, wont be inserted to db.", t.id() ); continue; } double ave = calculateAVE(publication.isMagazine(), publication.adRate(), t.prominence().m_size, t.prominence().m_size, false); query.bindValue(":id_company", t.id()); query.bindValue(":mention_score", t.prominence().m_mentionScore); query.bindValue(":visual_score", t.prominence().m_visualScore); query.bindValue(":tone_score", t.prominence().m_toneScore); query.bindValue(":created_by", createdBy); if(publication.isMagazine()) { query.bindValue(":size_cc", QVariant(QVariant::Double) ); query.bindValue(":size_page", t.prominence().m_size); } else { query.bindValue(":size_cc", t.prominence().m_size); query.bindValue(":size_page", QVariant(QVariant::Double) ); } query.bindValue(":ave", ave); query.bindValue(":note", t.prominence().m_note); if(!query.exec() ) { qDebug() << "insertPromience() Sql Error " << query.lastError().text(); qDebug() << "exe query:" << query.executedQuery(); } } qDebug("end of insertPromience()"); } void Article::updateProminence(QSqlDatabase &database, Publication &publication, QList &tags, int createdBy) { qDebug("updateProminence()"); //delete prominence for this aricle, and re-insert them. QSqlQuery query(database); query.prepare("DELETE FROM prominence WHERE id_article = :id_article"); query.bindValue(":id_article", m_id); if(!query.exec()) { //could delete all prominence to db. qDebug() << "updateProminence() Sql Error " << query.lastError().text(); qDebug() << "exe query:" << query.executedQuery(); } insertPromience(database, publication, m_id, tags, createdBy); qDebug("end of updateProminence()"); }