Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 32
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
remove_outdated_media
0.00% covered (danger)
0.00%
0 / 32
0.00% covered (danger)
0.00%
0 / 3
42
0.00% covered (danger)
0.00%
0 / 1
 depends_on
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 update_data
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 change_extension_group
0.00% covered (danger)
0.00%
0 / 26
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2/**
3*
4* This file is part of the phpBB Forum Software package.
5*
6* @copyright (c) phpBB Limited <https://www.phpbb.com>
7* @license GNU General Public License, version 2 (GPL-2.0)
8*
9* For full copyright and license information, please see
10* the docs/CREDITS.txt file.
11*
12*/
13
14namespace phpbb\db\migration\data\v320;
15
16class remove_outdated_media extends \phpbb\db\migration\migration
17{
18    // Following constants were deprecated in 3.2
19    // and moved from constants.php to compatibility_globals.php,
20    // thus define them as class constants
21    const ATTACHMENT_CATEGORY_WM = 2;
22    const ATTACHMENT_CATEGORY_RM = 3;
23    const ATTACHMENT_CATEGORY_QUICKTIME = 6;
24
25    protected $cat_id = array(
26            self::ATTACHMENT_CATEGORY_WM,
27            self::ATTACHMENT_CATEGORY_RM,
28            self::ATTACHMENT_CATEGORY_QUICKTIME,
29        );
30
31    public static function depends_on()
32    {
33        return array(
34            '\phpbb\db\migration\data\v320\dev',
35        );
36    }
37
38    public function update_data()
39    {
40        return array(
41            array('custom', array(array($this, 'change_extension_group'))),
42        );
43    }
44
45    public function change_extension_group()
46    {
47        // select group ids of outdated media
48        $sql = 'SELECT group_id
49            FROM ' . EXTENSION_GROUPS_TABLE . '
50            WHERE ' . $this->db->sql_in_set('cat_id', $this->cat_id);
51        $result = $this->db->sql_query($sql);
52
53        $group_ids = array();
54        while ($group_id = (int) $this->db->sql_fetchfield('group_id'))
55        {
56            $group_ids[] = $group_id;
57        }
58        $this->db->sql_freeresult($result);
59
60        // nothing to do, admin has removed all the outdated media extension groups
61        if (empty($group_ids))
62        {
63            return true;
64        }
65
66        // get the group id of downloadable files
67        $sql = 'SELECT group_id
68            FROM ' . EXTENSION_GROUPS_TABLE . "
69            WHERE group_name = 'DOWNLOADABLE_FILES'";
70        $result = $this->db->sql_query($sql);
71        $download_id = (int) $this->db->sql_fetchfield('group_id');
72        $this->db->sql_freeresult($result);
73
74        if (empty($download_id))
75        {
76            $sql = 'UPDATE ' . EXTENSIONS_TABLE . '
77                SET group_id = 0
78                WHERE ' . $this->db->sql_in_set('group_id', $group_ids);
79        }
80        else
81        {
82            // move outdated media extensions to downloadable files
83            $sql = 'UPDATE ' . EXTENSIONS_TABLE . "
84                SET group_id = $download_id" . '
85                WHERE ' . $this->db->sql_in_set('group_id', $group_ids);
86        }
87
88        $this->db->sql_query($sql);
89
90        // delete the now empty, outdated media extension groups
91        $sql = 'DELETE FROM ' . EXTENSION_GROUPS_TABLE . '
92            WHERE ' . $this->db->sql_in_set('group_id', $group_ids);
93        $this->db->sql_query($sql);
94    }
95}