1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
   | MangooForm::Ptr loadForm( const QString & docId )
{
    using namespace tango::sql;
    MangooForm::Ptr dbForm( new MangooForm() );
    dbForm->uniqueId = docId;
    QSqlError err = qx::dao::fetch_by_id( dbForm );
    THROW_IF_SQL_ERROR( err, "Unable to load form document!" );
 
    // Load pages
    QList<FormPage::Ptr> pages;
    {
        qx::QxSqlQuery query( "WHERE FormPage.doc_id = :doc_id" );
        query.bind( ":doc_id", dbForm->uniqueId );
        QSqlError err = qx::dao::fetch_by_query( query, pages );
        THROW_IF_SQL_ERROR( err, "Unable to load form pages!" );
    }
    BOOST_FOREACH( const FormPage::Ptr & page, pages )
    {
        dbForm->pages.append( page );
        page->doc = dbForm;
        // Load sections
        QList<FormSection::Ptr> sections;
        {
            qx::QxSqlQuery query( "WHERE FormSection.page_id = :page_id" );
            query.bind( ":page_id", (int)page->id );
            QSqlError err = qx::dao::fetch_by_query( query, sections );
            THROW_IF_SQL_ERROR( err, "Unable to load form section!" );
        }
        BOOST_FOREACH( const FormSection::Ptr & section, sections )
        {
            page->sections.append( section );
            section->page = page;
            // Load sections
            QList<FormComponent::Ptr> components;
            {
                qx::QxSqlQuery query( "WHERE FormComponent.section_id = :section_id" );
                query.bind( ":section_id", (int)section->id );
                QSqlError err = qx::dao::fetch_by_query( query, components );
                THROW_IF_SQL_ERROR( err, "Unable to load form component!" );
            }
            BOOST_FOREACH( const FormComponent::Ptr & formComponent, components )
            {
                section->components.append( formComponent );
                formComponent->section = section;
                mangoo::db::fillFormComponentProperties( formComponent );
            }
        }
    }
    return dbForm;
} | 
Partager