- name: Does /opt/nextcloud/version.php exist?
  stat:
    path: "{{ nextcloud_prefix }}/nextcloud/version.php"
  register: nextcloud_page

- name: FORCE INSTALL OR REINSTALL OR UPGRADE IF {{ nextcloud_prefix }}/nextcloud/version.php DOESN'T EXIST
  set_fact:
    nextcloud_force_install: True
  when: not nextcloud_page.stat.exists

# - debug:
#     var: nextcloud_force_install

# - debug:
#     msg: "nextcloud_force_install: {{ nextcloud_force_install }}"

- name: Download {{ nextcloud_dl_url }}/{{ nextcloud_orig_src_file_old }} to {{ downloads_dir }}/{{ nextcloud_src_file_old }} on older OS's lacking PHP 7.1+
  get_url:
    url: "{{ nextcloud_dl_url }}/{{ nextcloud_orig_src_file_old }}"
    dest: "{{ downloads_dir }}/{{ nextcloud_src_file_old }}"
    timeout: "{{ download_timeout }}"
    force: yes
    #validate_certs: False    # TEMPORARY ON/AFTER 2018-07-22 AS download.nextcloud.com CERT EXPIRED: https://github.com/iiab/iiab/issues/954
  #async: 1800
  #poll: 10
  tags:
    - download
  when: internet_available and nextcloud_force_install and (is_debian_9 or is_raspbian_9)

- name: Download {{ nextcloud_dl_url }}/{{ nextcloud_orig_src_file }} to {{ downloads_dir }}/{{ nextcloud_src_file }} on newer OS's that have PHP 7.1+
  get_url:
    url: "{{ nextcloud_dl_url }}/{{ nextcloud_orig_src_file }}"
    dest: "{{ downloads_dir }}/{{ nextcloud_src_file }}"
    timeout: "{{ download_timeout }}"
    force: yes
    #validate_certs: False    # TEMPORARY ON/AFTER 2018-07-22 AS download.nextcloud.com CERT EXPIRED: https://github.com/iiab/iiab/issues/954
  #async: 1800
  #poll: 10
  tags:
    - download
  when: internet_available and nextcloud_force_install and not (is_debian_9 or is_raspbian_9)

# Ubuntu and Debian treat names differently
- name: Install 3 php packages (debian)
  package:
    name:
      - "libapache2-mod-php{{ php_version }}"
      - "php{{ php_version }}-mbstring"
      - "php{{ php_version }}-zip"
    state: present
  when: is_debian | bool

# Ubuntu and Debian treat names differently
- name: Install 4 php packages (ubuntu)
  package:
    name:
      - libapache2-mod-php
      - php-imagick
      - php-zip
      - php-mbstring
    state: present
  when: is_ubuntu | bool

- name: Install 5 more php packages (debuntu)
  package:
    name:
      - "php{{ php_version }}-gd"
      - "php{{ php_version }}-json"
      - "php{{ php_version }}-mysql"
      - "php{{ php_version }}-curl"
      - "php{{ php_version }}-intl"
    state: present
  when: is_debuntu | bool

- name: 'Install php{{ php_version }}-mcrypt IF this is a "pre-2018" distro in the debuntu family. NOTE: PHP 7.1 deprecated mcrypt 1-Dec-2016 and PHP 7.2 dropped it completely 30-Nov-2017, as it should no longer be nec.'
  package:
    name: "php{{ php_version }}-mcrypt"
    state: present
  when: is_debian_8 or is_debian_9 or is_ubuntu_16 or is_ubuntu_17
  # NOT NEC TO TEST FOR is_raspbian_8 OR is_raspbian_9 AS /opt/iiab/iiab/vars/<OS>.yml
  # DEFINES THESE AS SUBSETS OF is_debian_8 OR is_debian_9 (FOR NOW!)

# we need to install the rpm in order to get the dependencies
# but we only need to do this the first time

- name: Install 7 php packages (redhat)
  package:
    name:
      - php
      - php-gd
      - php-json
      - php-mysql
      - php-curl
      - php-intl
      - php-mcrypt
      # CentOS does not have a package for php-imagick
      #- php-imagick
    state: present
  when: is_redhat | bool

- name: Unarchive {{ nextcloud_src_file_old }} to permanent location {{ nextcloud_prefix }}/nextcloud on older OS's lacking PHP 7.1+    # e.g. unpack nextcloud_latest-15.tar.bz2 to /opt/nextcloud
  unarchive:
    src: "{{ downloads_dir }}/{{ nextcloud_src_file_old }}"
    dest: "{{ nextcloud_prefix }}"
    #creates: "{{ nextcloud_prefix }}/nextcloud/version.php"
  when: nextcloud_force_install and (is_debian_9 or is_raspbian_9)

- name: Unarchive {{ nextcloud_src_file }} to permanent location {{ nextcloud_prefix }}/nextcloud on newer OS's that have PHP 7.1+    # e.g. unpack nextcloud_latest-16.tar.bz2 to /opt/nextcloud
  unarchive:
    src: "{{ downloads_dir }}/{{ nextcloud_src_file }}"
    dest: "{{ nextcloud_prefix }}"
    #creates: "{{ nextcloud_prefix }}/nextcloud/version.php"
  when: nextcloud_force_install and not (is_debian_9 or is_raspbian_9)

- name: Create dir /etc/nextcloud (centos) for a subsequent config dir that's symlinked to /etc/nextcloud ?
  file:
    path: /etc/nextcloud
    state: directory
  when: is_centos | bool

- name: Install {{ nextcloud_prefix }}/nextcloud/config/autoconfig.php from template (centos)
  template:
    src: autoconfig.php.j2
    dest: "{{ nextcloud_prefix }}/nextcloud/config/autoconfig.php"
    owner: "{{ apache_user }}"
    group: "{{ apache_user }}"
    mode: 0640
  when: is_centos | bool

- name: chown -R {{ apache_user }}:{{ apache_user }} {{ nextcloud_prefix }}/nextcloud
  file:
    path: "{{ nextcloud_prefix }}/nextcloud"
    owner: "{{ apache_user }}"
    group: "{{ apache_user }}"
    recurse: yes
    state: directory

- name: Create data directory {{ nextcloud_data_dir }}    # /opt/nextcloud/data
  file:
    path: "{{ nextcloud_data_dir }}"
    owner: "{{ apache_user }}"
    group: "{{ apache_user }}"
    mode: 0750
    state: directory

- name: 'Create MySQL database with name: {{ nextcloud_dbname }}'
  mysql_db:
    name: "{{ nextcloud_dbname }}"
  when: mysql_enabled and nextcloud_enabled

- name: Add username/password to the MySQL database (associated with trusted IP's like localhost)
  mysql_user:
    name: "{{ nextcloud_dbuser }}"
    host: "{{ item }}"
    password: "{{ nextcloud_dbpassword }}"
    priv: "{{ nextcloud_dbname }}.*:ALL,GRANT"
  with_items:
    - "{{ nextcloud_dbhost }}"
    - 127.0.0.1
    - ::1
    - localhost
  when: mysql_enabled and nextcloud_enabled

# Appears unnec as nextcloud_enabled.yml (just below) does the same
#- name: Restart Apache
#  service:
#    name: "{{ apache_service }}"
#    state: restarted
## when: nextcloud_enabled | bool    # taken care of by nextcloud_enabled.yml below
#  when: not nextcloud_enabled

# Enables or disable Nextcloud!
- include_tasks: nextcloud_enabled.yml

- name: Add 'nextcloud' variable values to {{ iiab_ini_file }}
  ini_file:
    path: "{{ iiab_ini_file }}"
    section: Nextcloud
    option: "{{ item.option }}"
    value: "{{ item.value }}"
  with_items:
    - option: name
      value: Nextcloud
    - option: description
      value: '"NextCloud is a local server-based facility for sharing files, photos, contacts, calendars, etc."'
    - option: path
      value: "{{ nextcloud_prefix }}/nextcloud"
    - option: nextcloud_force_install
      value: "{{ nextcloud_force_install }}"
    - option: nextcloud_orig_src_file
      value: "{{ nextcloud_orig_src_file }}"
    - option: nextcloud_src_file
      value: "{{ nextcloud_src_file }}"
    - option: nextcloud_enabled
      value: "{{ nextcloud_enabled }}"
