AutorÃa | Ultima modificación | Ver Log |
<?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/>./*** Common functions.** @package block_dash* @copyright 2019 bdecent gmbh <https://bdecent.de>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/use block_dash\local\data_source\categories_data_source;use block_dash\local\data_source\form\preferences_form;use block_dash\local\layout\grid_layout;use block_dash\local\layout\accordion_layout;use block_dash\local\layout\one_stat_layout;use block_dash\local\data_source\users_data_source;use block_dash\local\widget\mylearning\mylearning_widget;use block_dash\local\widget\groups\groups_widget;use block_dash\local\widget\contacts\contacts_widget;use block_dash\local\widget\skillprogress\skillprogress_widget;define("BLOCK_DASH_FILTER_TABS_COUNT", 4);/*** Register field definitions.** @return array*/function block_dash_register_field_definitions() {global $CFG;if (PHPUNIT_TEST) {return require("$CFG->dirroot/blocks/dash/field_definitions_phpunit.php");}return require("$CFG->dirroot/blocks/dash/field_definitions.php");}/*** Register data sources.** @return array* @throws coding_exception*/function block_dash_register_data_sources() {return [['name' => get_string('users'),'help' => ['name' => 'users', 'component' => 'block_dash'],'identifier' => users_data_source::class,],];}/*** Register layouts.** @return array* @throws coding_exception*/function block_dash_register_layouts() {return [['name' => get_string('layoutgrid', 'block_dash'),'identifier' => grid_layout::class,],];}/*** Register widgets.** @return array* @throws coding_exception*/function block_dash_register_widget() {return [['name' => get_string('widget:mylearning', 'block_dash'),'identifier' => mylearning_widget::class,'help' => 'widget:mylearning',],['name' => get_string('widget:mycontacts', 'block_dash'),'identifier' => contacts_widget::class,'help' => 'widget:mycontacts',],['name' => get_string('widget:mygroups', 'block_dash'),'identifier' => groups_widget::class,'help' => 'widget:mygroups',],];}/*** Serve the new group form as a fragment.** @param array $args List of named arguments for the fragment loader.* @return string*/function block_dash_output_fragment_block_preferences_form($args) {global $DB, $OUTPUT;$args = (object) $args;$context = $args->context;$blockinstance = $DB->get_record('block_instances', ['id' => $context->instanceid]);$block = block_instance($blockinstance->blockname, $blockinstance);if (!$args->tab) {$args->tab = preferences_form::TAB_GENERAL;}$form = new preferences_form(null, ['block' => $block, 'tab' => $args->tab], 'post', '', ['class' => 'dash-preferences-form','data-double-submit-protection' => 'off',]);require_capability('block/dash:addinstance', $context);if (isset($block->config->preferences)) {$data = block_dash_flatten_array($block->config->preferences, 'config_preferences');$form->set_data($data);}ob_start();$form->display();$formhtml = ob_get_contents();ob_end_clean();$tabs = [];foreach (preferences_form::TABS as $tab) {$tabs[] = ['label' => get_string($tab, 'block_dash'),'active' => $tab == $args->tab,'tabid' => $tab,];}return $OUTPUT->render_from_template('block_dash/preferences_form', ['formhtml' => $formhtml,'tabs' => $tabs,'istotara' => block_dash_is_totara(),]);}/*** File serving callback** @param stdClass $course course object* @param stdClass $cm course module object* @param stdClass $context context object* @param string $filearea file area* @param array $args extra arguments* @param bool $forcedownload whether or not force download* @param array $options additional options affecting the file serving* @return bool false if the file was not found, just send the file otherwise and do not return anything*/function block_dash_pluginfile($course, $cm, $context, $filearea, $args, $forcedownload, array $options=[]) {if ($context->contextlevel != CONTEXT_BLOCK && $context->contextlevel != CONTEXT_SYSTEM) {return false;}require_login();if ($filearea == 'images' || $filearea == 'categoryimg') {$relativepath = implode('/', $args);$fullpath = "/$context->id/block_dash/$filearea/$relativepath";$fs = get_file_storage();$file = $fs->get_file_by_hash(sha1($fullpath));if (!$file || $file->is_directory()) {return false;}send_stored_file($file, null, 0, $forcedownload, $options);}}/*** Flatten array to form field names.** @param array $array* @param string $prefix* @return array*/function block_dash_flatten_array($array, $prefix = '') {$result = [];foreach ($array as $key => $value) {if (is_integer($key)) {// Don't flatten arrays with numeric indexes. Otherwise it won't be set on the Moodle form.$result[$prefix] = $array;} else if (is_array($value)) {$result = $result + block_dash_flatten_array($value, $prefix . '[' . $key . ']');} else {$result[$prefix . '[' . $key . ']'] = $value;}}return $result;}/*** Check if system is Totara.** @return bool*/function block_dash_is_totara() {global $CFG;return file_exists("$CFG->dirroot/totara");}/*** Check if pro plugin is installed.** @return bool*/function block_dash_has_pro() {return array_key_exists('dash', core_component::get_plugin_list('local'));}/*** Check if dash output should be disabled.** @return bool* @throws dml_exception*/function block_dash_is_disabled() {global $CFG;if (get_config('block_dash', 'disableall')) {return true;}if (isset($CFG->block_dash_disableall) && $CFG->block_dash_disableall) {return true;}return false;}/*** Fragment to load the widget methods.** @param stdclass $args* @return string Returns the widget content.*/function block_dash_output_fragment_loadwidget($args) {global $DB;$args = (object) $args;$context = $args->context;$blockinstance = $DB->get_record('block_instances', ['id' => $context->instanceid]);$block = block_instance($blockinstance->blockname, $blockinstance);$datasource = block_dash\local\block_builder::create($block)->get_configuration()->get_data_source();if (isset($datasource->iswidget)) {$method = $args->method;$params = json_decode($args->args);if (isset($params->page)) {$datasource->get_paginator()->set_current_page($params->page);}return (method_exists($datasource, $method)) ? $datasource->$method($context, $params) : '';}return null;}/*** Load the table pagination via ajax. withou page refresh.** @param stdclass $args* @return string*/function block_dash_output_fragment_loadtable($args) {global $DB;$args = (object) $args;$context = $args->context;$classstr = 'block_dash\table\\'.$args->handler;$table = new $classstr($args->uniqueid);$table->set_filterset(json_decode($args->filter));$table->set_sort_column($args->sort);$table->currentpage = isset($args->page) ? $args->page : 0;ob_start();echo html_writer::start_div('dash-widget-table');$table->out(10, true);echo html_writer::end_div();$tablehtml = ob_get_contents();ob_end_clean();return $tablehtml;}/*** Get list of all suggest users for contact list.*/function block_dash_get_suggest_users() {global $DB, $CFG;$users = $DB->get_records_sql("SELECT *FROM {user}WHERE confirmed = 1 AND deleted = 0 AND id <> ?", [$CFG->siteguest]);foreach ($users as $user) {$list[$user->id] = fullname($user);}return isset($list) ? $list : [];}/*** Get the current php version related data collection. Data collection implements PHP arrayAccess class.* PHP arrayaccess parameters are changed from 8.1.** @return mixed*/function block_dash_get_data_collection() {return version_compare(phpversion(), '8.1', '<')? new block_dash\local\data_grid\data\data_collection() : new \block_dash\local\data_grid\data\data_collection_new();}/*** Return the dash addon visible staus.** @param int $id ID* @return bool*/function block_dash_visible_addons($id) {global $CFG;preg_match('/(dashaddon_[a-zA-Z_]+)/', $id, $matches);if ($matches) {$value = $matches[1];$parts = explode('\\', $value);if ($parts) {$addon = $parts[0];$addondependencies = $addon . "_extend_added_dependencies";if (get_config($addon, 'enabled')) {$addonplugin = explode("dashaddon_", $addon)[1];if (file_exists($CFG->dirroot. "/local/dash/addon/$addonplugin/lib.php")) {require_once($CFG->dirroot. "/local/dash/addon/$addonplugin/lib.php");if (function_exists($addondependencies) && !empty($addondependencies())) {return false;}}} else {return false;}}}return true;}