Seditio Source
Root |
./othercms/phpBB3/phpbb/db/migration/data/v33x/profilefield_youtube_update.php
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/

namespace phpbb\db\migration\data\v33x;

class
profilefield_youtube_update extends \phpbb\db\migration\migration
{
    protected
$youtube_url_matcher = 'https:\\/\\/(www\\.)?youtube\\.com\\/.+';

    public function
effectively_installed()
    {
       
$profile_fields = $this->table_prefix . 'profile_fields';

       
$result = $this->db->sql_query(
           
"SELECT field_validation
                FROM
$profile_fields
                WHERE field_name = 'phpbb_youtube'"
       
);

       
$row = $this->db->sql_fetchrow($result);
       
$this->db->sql_freeresult($result);

        return
$row['field_validation'] === $this->youtube_url_matcher;
    }

    public static function
depends_on()
    {
        return [
'\phpbb\db\migration\data\v33x\v337'];
    }

    public function
update_data()
    {
        return [[
'custom', [[$this, 'update_youtube_profile_field']]]];
    }

    public function
update_youtube_profile_field()
    {
       
$profile_fields = $this->table_prefix . 'profile_fields';
       
$profile_fields_data = $this->table_prefix . 'profile_fields_data';

       
$field_validation = $this->db->sql_escape($this->youtube_url_matcher);

       
$min_length = strlen('https://youtube.com/c/') + 1;

       
$this->db->sql_query(
           
"UPDATE $profile_fields SET
                field_length = '40',
                field_minlen = '
$min_length',
                field_maxlen = '255',
                field_validation = '
$field_validation',
                field_contact_url = '%s'
                WHERE field_name = 'phpbb_youtube'"
       
);

       
$yt_profile_field = 'pf_phpbb_youtube';
       
$prepend_legacy_youtube_url = $this->db->sql_concatenate(
           
"'https://youtube.com/user/'", $yt_profile_field
       
);
       
$is_not_already_youtube_url = $this->db->sql_not_like_expression(
           
$this->db->get_any_char()
                .
'youtube.com/'
               
. $this->db->get_any_char()
        );

       
$this->db->sql_query(
           
"UPDATE $profile_fields_data SET
               
$yt_profile_field = $prepend_legacy_youtube_url
                WHERE
$yt_profile_field <> ''
                AND
$yt_profile_field $is_not_already_youtube_url"
       
);
    }
}