- become: yes
  tags:
    - mediawiki
    - mediawiki-packages
  block:
    - name: packages
      vars:
        items:
          - composer
          - php-apcu
          - php-gd
          - php-intl
          - php-mbstring
          - php-pgsql
          - php-xml
          - php-zip
      apt:
        name: "{{ items }}"
        install_recommends: no

- become: yes
  tags:
    - mediawiki
    - mediawiki-php
  block:
    - name: increase maximum file size (for uploads) to 20M
      notify: service restart php-fpm
      ini_file:
        path: /etc/php/7.0/fpm/php.ini
        section: PHP
        option: "{{ item.option }}"
        value: "{{ item.value }}"
      with_items:
        - option: upload_max_filesize
          value: 20M
        - option: post_max_size
          value: 20M

- become: yes
  tags:
    - mediawiki
    - mediawiki-clone
  block:
    - name: mkdir /opt/mediawiki
      file:
        path: /opt/mediawiki
        state: directory

    - name: mkdir /opt/mediawiki/mediawiki
      file:
        path: /opt/mediawiki/mediawiki
        state: directory
        owner: www-data

    - name: git clone
      become: yes
      become_user: www-data
      vars:
        ansible_ssh_pipelining: true
      git:
        repo: https://github.com/bitraf/mediawiki
        dest: /opt/mediawiki/mediawiki
        version: "{{ mediawiki__version }}"
        update: "{{ 'yes' if mediawiki__force_update else 'no' }}"
        force: "{{ 'yes' if mediawiki__force_update else 'no' }}"

- become: yes
  tags:
    - mediawiki
    - mediawiki-composer
  block:
    - name: mkdirs
      with_items:
        - /var/www/.ansible
        - /var/www/.composer
      file:
        path: "{{ item }}"
        state: directory
        group: www-data
        owner: www-data

    - name: Create composer.local.json
      when: mediawiki__composer_require is defined
      vars:
        content: |
          {{ '{ "require": {' }}
          {% for k, v in mediawiki__composer_require.items() %}
            "{{ k }}": "{{ v }}"{% if not loop.last %},{% endif %}
          {% endfor %}
          {{ '} }' }}
      copy:
        dest: /opt/mediawiki/mediawiki/composer.local.json
        content: "{{ content | to_nice_json }}"

    - name: run composer
      become: yes
      become_user: www-data
      vars:
        ansible_ssh_pipelining: true
      composer:
        command: update
        working_dir: /opt/mediawiki/mediawiki

- name: "Extensions"
  become: yes
  tags:
    - mediawiki
    - mediawiki-extensions
  with_items: "{{ mediawiki__extensions }}"
  git:
    repo: "{{ item.repo }}"
    dest: "/opt/mediawiki/mediawiki/extensions/{{ item.dest }}"
    version: "{{ item.version }}"

- become: yes
  tags:
    - mediawiki
    - mediawiki-backup
  block:
    # TODO: install systemd timer and service to run these
    - name: mkdir
      file:
        state: directory
        path: "/opt/mediawiki/backup"
    - copy:
        src: "{{ item }}"
        dest: "/{{ item }}"
        mode: a+rx
      with_items:
        - bin/mw-dump-backup
        - bin/mw-dump-db

- become: yes
  tags:
    - mediawiki
    - mediawiki-config
  block:
    - file:
        path: /etc/mediawiki
        state: directory
    - file:
        dest: /opt/mediawiki/mediawiki/LocalSettings.php
        src: /etc/mediawiki/LocalSettings.php
        state: link
        force: yes

    - name: mediawiki systemd timer
      notify: systemd daemon-reload
      copy:
        src: "systemd/{{ item }}"
        dest: "/etc/systemd/system/{{ item }}"
      with_items:
        - mediawiki-jobqueue.service
        - mediawiki-jobqueue.timer

- meta: flush_handlers

- become: yes
  tags:
    - mediawiki
    - mediawiki-config
  block:
    - systemd:
        enabled: true
        state: started
        name: mediawiki-jobqueue.timer

- become: yes
  tags:
    - mediawiki
    - mediawiki-config
    - update-password
  block:
    - name: LocalSettings.php
      template:
        dest: /etc/mediawiki
        src: "{{ mediawiki__local_settings }}"