Skip to main content
  1. All Posts/

nau-wp-sync

Tools Open Source Sync WordPress

DataSync – MySQL+MongoDB -> WordPress

Usage

  • Setup a Virtual Environment
  • Set the “config.ini” file based on the “config.init.sample”.
  • Execute “report.py”

Activate virtual environment and install its dependencies

virtualenv venv --python=python3
source venv/bin/activate
python -m pip install -r requirements.txt --upgrade

Set the “config.ini” file based on the “config.init.sample”.

cp config.sample.yml config.yml
vi config.yml

Execute “sync.py”

python sync.py

Opções

python sync.py [-t] [-c|--config <config.yml>] [-d|--debug <level>] [-i|--course <course-id>] -e|environment <environment>
  • -e –environment
    • define o ambiente destino: “stage” ou “prod”
  • -d –debug
    • re-define o nível de logging: DEBUG, INFO, WARNING, CRITICAL, FATAL
  • -c –config
    • ficheiro de configuração. Por omissão, config.yml na pasta atual
  • -i –course
    • identifica um curso único para atualizar
  • -t
    • modo de teste – não aplica modificações no wordpress destino

Informação Adicional

Estrutura de acesso MongoDB do OpenEDX.
Conceitos:

  1. A collection “active_versions” tem os cursos ativos no momento
  2. A collection “structures” tem os cursos em histórico
  3. A collection “definitions” tem os objetos propriamente ditos

O passo de pesquisa é sempre:

  • Um curso é definido por:

    • Course
    • Org
    • run
  • Encontrar o curso em “active_versions”.
  • Seleccionar o “published-branch”

    • Iterar pelos “blocks”
    • O “block_type” indica que tipo de bloco é
    • O “definition” indica qual o objeto em “definitions” que tem este conteúdo
    • Finalmente é preciso consultar a collection “definitions” pesquisando pelo “_id” do objeto referenciado por block[“definition”]
    <p>
      $ mongo admin -u admin -p &#8211;host rs0/localhost<br /> Enter password: <Put the value of variable <code>MONGO_ADMIN_PASSWORD</code> on the secure-nau-data repo><br /> use edxapp </li> </ul> 
      
      <p>
        OR<br /> $ mongo edxapp -u edxapp -p<br /> Enter password: <Put the value of variable <code>EDXAPP_MONGO_PASSWORD</code> on the secure-nau-data repo><br /> Or using Mongo Compass:<br /> connection string like:<br /> ssh -L 27017:localhost:27017 mongo-database-machine<br /> mongodb://edxapp:*****@127.0.0.1:27017/edxapp?authSource=edxapp&readPreference=primary&appname=MongoDB%20Compass&ssl=false<br /> To get the course language run:
      </p>
      
      <pre class="notranslate"><code>    db.modulestore.active_versions.find({"course":"IVOSAND", "org":"FCT", "run":"2021_T2"}).forEach(
        function(obj) {        
            var published_id = obj["versions"]["published-branch"];
            struct_obj = db.modulestore.structures.find(published_id).forEach(
              function(obj) {
                  obj["blocks"].forEach(
                    function(block) {
                        if (block.fields.hasOwnProperty("language")) {
                            print( block.fields["language"] );
                        }
                    }
                  );
              }
            );
        }
    )
    

      <p>
        Este é um script mongodb que lista todos os objetos a colocar no WordPress!
      </p>
      
      <pre class="notranslate"><code>    db.modulestore.active_versions.find({"course":"IVOSAND", "org":"FCT", "run":"2021_T2"}).forEach(
        function(obj) {        
            var published_id = obj["versions"]["published-branch"];
            struct_obj = db.modulestore.structures.find(published_id).forEach(
              function(obj) {
                  obj["blocks"].forEach(
                    function(block) {
                        //if(block["block_type"]=="about") {
                            printjson( {
                                "block_id": block["block_id"],
                                //"edited_on": block["edit_info"]["edited_on"],
                                // "content_id": block["edit_info"]["source_version"],
                                "content": db.modulestore.definitions.findOne({"_id" : block["definition"]})["fields"]["data"],
                                // "block": block
                            } );
                        //}
                    }
                  );
              }
            );
        }
    )
    

      <p>
        O resultado é o seguinte:
      </p>
      
      <pre class="notranslate"><code>    /* 1 */
    {
        "block_id" : "effort",
        "content" : "2 h/semana"
    }
     
    /* 2 */
    {
        "block_id" : "duration",
        "content" : ""
    }
     
    /* 3 */
    {
        "block_id" : "title",
        "content" : ""
    }
     
    /* 4 */
    {
        "block_id" : "about_sidebar_html",
        "content" : ""
    }
     
    /* 5 */
    {
        "block_id" : "short_description",
        "content" : "Este curso aborda, de forma introdutória, as normas de acessibilidade web e as estratégias para tornar acessíveis os formatos de conteúdo mais utilizados na web."
    }
     
    /* 6 */
    {
        "block_id" : "entrance_exam_id",
        "content" : ""
    }
     
    /* 7 */
    {
        "block_id" : "entrance_exam_minimum_score_pct",
        "content" : "50"
    }
     
    /* 8 */
    {
        "block_id" : "subtitle",
        "content" : ""
    }
     
    /* 9 */
    {
        "block_id" : "overview",
        "content" : "&lt;section class="about"&gt;n  &lt;h2&gt;Sobre o curso&lt;/h2&gt;n  &lt;p&gt;O curso começa com uma introdução à regulamentação da acessibilidade web, fornecendo uma perspetiva histórica, quer no panorama mundial, quer em Portugal, e uma clarificação das diretrizes de acessibilidade para conteúdo web (WCAG). Segue-se o módulo que introduz a questão das interfaces, dos produtos ou tecnologias de apoio e as ferramentas para verificar o nível de conformidade com as WCAG 2.0 das páginas web. Os módulos seguintes abordam as estratégias para criar e disponibilizar conteúdo acessível nas páginas web, ou seja, imagem, texto e vídeo.&lt;/p&gt;n &lt;p&gt;Em cada módulo são apresentados desafios que permitem ao participante avaliar o seu nível de aprendizagem e refletir sobre o tema abordado em cada módulo.&lt;/p&gt;n &lt;p&gt;Os conteúdos e atividades propostas são acessíveis a tecnologias de apoio, permitindo a qualquer utilizador participar no curso.&lt;/p&gt;n  &lt;p&gt;&lt;/p&gt;n  &lt;h2&gt;Contactos&lt;/h2&gt;n  &lt;p&gt;E-mail: suporte.ued@ipleiria.pt.&lt;/p&gt;n  &lt;p&gt;Tel: (351) 244845052&lt;/p&gt;n&lt;/section&gt;nn&lt;section class="prerequisites"&gt;n  &lt;h2&gt;Pré-requisitos&lt;/h2&gt;n  &lt;p&gt;Este curso destina-se a qualquer pessoa que contribua com conteúdos para a web (em sites, redes sociais, blogs, email, etc.) ou com interesse na temática, sendo por isso fundamental estar familiarizado com o ambiente web.&lt;/p&gt;n&lt;/section&gt;nn&lt;section class="course-staff"&gt;n  &lt;h2&gt;Instrutores&lt;/h2&gt;n  &lt;article class="teacher"&gt;n    &lt;div class="teacher-image" style="border:none;"&gt;n      &lt;img src="/static/foto_manuela_francisco.png" align="left" style="margin:0 20 px 0" alt="Foto de Manuela Francisco"&gt;n    &lt;/div&gt;nn    &lt;h3&gt;Manuela Francisco&lt;/h3&gt;n    &lt;p style="padding-left:131px;"&gt;Doutorada em Educação a Distancia e eLearning, desenvolve investigação na área do eLearning acessível. É Designer Instrucional no Politécnico de Leiria, desde 2007. Foi docente na ESAD-FRESS e colabora com a Universidade Aberta em atividades de investigação e docência. Integra a equipa de revisão da versão portuguesa das WCAG e esteve envolvida em vários projetos europeus e grupos de trabalho nacionais.&lt;/p&gt;n  &lt;/article&gt;n  n  &lt;article class="teacher"&gt;n    &lt;div class="teacher-image" style="border:none;"&gt;n      &lt;img src="/static/foto_sandro_costa.png" align="left" style="margin:0 20 px 0" alt="Foto de Sabdro Costa"&gt;n    &lt;/div&gt;nn    &lt;h3&gt;Sandro Costa&lt;/h3&gt;n    &lt;p style="padding-left:131px;"&gt;Licenciado em Comunicação e Multimedia e doutorando em Ciência e Tecnologia Web. Trabalha como Designer Multimedia na Unidade de Ensino a Distância do Politécnico de Leiria, desde 2008. Esteve envolvido em projetos europeus e nacionais como especialista multimédia. Ao nível da programação desenvolve sites, eBooks e plataformas acessíveis.&lt;/p&gt;n  &lt;/article&gt;nn  &lt;article class="teacher"&gt;n    &lt;div class="teacher-image" style="border:none;"&gt;n      &lt;img src="/static/foto_formador_carina.jpg" align="left" style="margin:0 20 px 0" alt="Foto de Carina Rodrigues"&gt;n    &lt;/div&gt;nn    &lt;h3&gt;Carina Rodrigues&lt;/h3&gt;n    &lt;p style="padding-left:131px;"&gt;Mestre em Ciências da Educação na área de Educação de Adultos, a terminar o Doutoramento em Ensino a Distância e eLearning. É Designer Instrucional e formadora na Unidade de Ensino a Distância do Politécnico de Leiria, desde 2008. Esteve envolvida em projetos europeus e nacionais relacionados com a área da inovação social, competências digitais e estratégias de active learning, desenvolvendo investigação nestas áreas.&lt;/p&gt;n  &lt;/article&gt;n&lt;/section&gt;nn"
    }
     
    /* 10 */
    {
        "block_id" : "entrance_exam_enabled",
        "content" : "false"
    }
     
    /* 11 */
    {
        "block_id" : "description",
        "content" : ""
    }