%PDF- %PDF-
Direktori : /home/vacivi36/ava/user/profile/field/social/ |
Current File : /home/vacivi36/ava/user/profile/field/social/upgradelib.php |
<?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Contains upgrade and install functions for the social profile fields. * * @package profilefield_social * @copyright 2020 Bas Brands <bas@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); require_once("$CFG->dirroot/user/profile/definelib.php"); /** * Create the default category for custom profile fields if it does not exist yet. * * @return int Category ID for social user profile category. */ function user_profile_social_create_info_category(): int { global $DB; $categories = $DB->get_records('user_info_category', null, 'sortorder ASC'); // Check that we have at least one category defined. if (empty($categories)) { $defaultcategory = (object) [ 'name' => get_string('profiledefaultcategory', 'admin'), 'sortorder' => 1 ]; return $DB->insert_record('user_info_category', $defaultcategory); } else { return (int)$DB->get_field_sql('SELECT min(id) from {user_info_category}'); } } /** * Called on upgrade to create new profile fields based on the old user table columns * for icq, msn, aim, skype and url. * * @param string $social Social profile field. */ function user_profile_social_moveto_profilefield($social) { global $DB; $users = $DB->get_records_select('user', "$social IS NOT NULL AND $social != ''"); if (count($users)) { $profilefield = user_profile_social_create_profilefield($social); foreach ($users as $user) { $userinfodata = [ 'userid' => $user->id, 'fieldid' => $profilefield->id, 'data' => $user->$social, 'dataformat' => 0 ]; $user->$social = ''; $DB->update_record('user', $user); $DB->insert_record('user_info_data', $userinfodata); } } } /** * Create an new custom social profile field if it does not exist * * @param string $social Social profile field. * @return object DB record or social profield field. */ function user_profile_social_create_profilefield($social) { global $DB, $CFG; $hiddenfields = explode(',', $CFG->hiddenuserfields); $confignames = [ 'url' => 'webpage', 'icq' => 'icqnumber', 'skype' => 'skypeid', 'yahoo' => 'yahooid', 'aim' => 'aimid', 'msn' => 'msnid', ]; $visible = (in_array($confignames[$social], $hiddenfields)) ? 3 : 2; $categoryid = user_profile_social_create_info_category(); $newfield = (object)[ 'shortname' => $social, 'name' => $social, 'datatype' => 'social', 'description' => '', 'descriptionformat' => 1, 'categoryid' => $categoryid, 'required' => 0, 'locked' => 0, 'visible' => $visible, 'forceunique' => 0, 'signup' => 0, 'defaultdata' => '', 'defaultdataformat' => 0, 'param1' => $social ]; $profilefield = $DB->get_record_sql( 'SELECT * FROM {user_info_field} WHERE datatype = :datatype AND ' . $DB->sql_compare_text('param1') . ' = ' . $DB->sql_compare_text(':social', 40), ['datatype' => 'social', 'social' => $social]); if (!$profilefield) { // Find a new unique shortname. $count = 0; $shortname = $newfield->shortname; while ($field = $DB->get_record('user_info_field', array('shortname' => $shortname))) { $count++; $shortname = $newfield->shortname . '_' . $count; } $newfield->shortname = $shortname; $profileclass = new profile_define_base(); $profileclass->define_save($newfield); profile_reorder_fields(); $profilefield = $DB->get_record_sql( 'SELECT * FROM {user_info_field} WHERE datatype = :datatype AND ' . $DB->sql_compare_text('param1') . ' = ' . $DB->sql_compare_text(':social', 40), ['datatype' => 'social', 'social' => $social]); } if (!$profilefield) { throw new moodle_exception('upgradeerror', 'admin', 'could not create new social profile field'); } return $profilefield; } /** * Update the module availability configuration for all course modules * */ function user_profile_social_update_module_availability() { global $DB; // Use transaction to improve performance if there are many individual database updates. $transaction = $DB->start_delegated_transaction(); // Query all the course_modules entries that have availability set. $rs = $DB->get_recordset_select('course_modules', 'availability IS NOT NULL', [], '', 'id, availability'); foreach ($rs as $mod) { if (isset($mod->availability)) { $availability = json_decode($mod->availability); if (!is_null($availability)) { user_profile_social_update_availability_structure($availability); $newavailability = json_encode($availability); if ($newavailability !== $mod->availability) { $mod->availability = json_encode($availability); $DB->update_record('course_modules', $mod); } } } } $rs->close(); $transaction->allow_commit(); } /** * Loop through the availability info and change all move standard profile * fields for icq, skype, aim, yahoo, msn and url to be custom profile fields. * @param mixed $structure The availability object. */ function user_profile_social_update_availability_structure(&$structure) { if (is_array($structure)) { foreach ($structure as $st) { user_profile_social_update_availability_structure($st); } } foreach ($structure as $key => $value) { if ($key === 'c' && is_array($value)) { user_profile_social_update_availability_structure($value); } if ($key === 'type' && $value === 'profile') { if (isset($structure->sf) && in_array($structure->sf, ['icq', 'skype', 'aim', 'yahoo', 'msn', 'url'])) { $structure->cf = $structure->sf; unset($structure->sf); } } } }