Файловый менеджер - Редактировать - /home/harasnat/www/mf/social_activities.tar
Назад
block_social_activities.php 0000604 00000023575 15062104635 0012137 0 ustar 00 <?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/>. /** * Social activities block. * * @package block_social_activities * @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com) * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class block_social_activities extends block_list { function init(){ $this->title = get_string('pluginname', 'block_social_activities'); } function applicable_formats() { return array('course-view-social' => true); } function get_content() { global $USER, $CFG, $DB, $OUTPUT; if ($this->content !== NULL) { return $this->content; } $this->content = new stdClass(); $this->content->items = array(); $this->content->icons = array(); $this->content->footer = ''; if (empty($this->instance)) { return $this->content; } $course = $this->page->course; $format = course_get_format($course); $courserenderer = $format->get_renderer($this->page); require_once($CFG->dirroot.'/course/lib.php'); $context = context_course::instance($course->id); $isediting = $this->page->user_is_editing() && has_capability('moodle/course:manageactivities', $context); $modinfo = get_fast_modinfo($course); // Output classes. $cmnameclass = $format->get_output_classname('content\\cm\\cmname'); $controlmenuclass = $format->get_output_classname('content\\cm\\controlmenu'); $badgeattributes = [ 'class' => 'badge badge-pill badge-warning mt-2', 'data-region' => 'visibility' ]; // Extra fast view mode. if (!$isediting) { if (!empty($modinfo->sections[0])) { foreach($modinfo->sections[0] as $cmid) { $cm = $modinfo->cms[$cmid]; if (!$cm->uservisible || !$cm->is_visible_on_course_page()) { continue; } $badges = ''; if (!$cm->visible) { $badges = html_writer::tag( 'span', get_string('hiddenfromstudents'), $badgeattributes ); } if ($cm->is_stealth()) { $badges = html_writer::tag( 'span', get_string('hiddenoncoursepage'), $badgeattributes ); } if (!$cm->url) { $activitybasis = html_writer::div( $cm->get_formatted_content(['overflowdiv' => true, 'noclean' => true]), 'activity-basis d-flex align-items-center' ); $content = html_writer::div( $activitybasis . $badges, 'contentwithoutlink activity-item activity', ['data-activityname' => $cm->name] ); $this->content->items[] = $content; $this->content->icons[] = ''; } else { $cmname = new $cmnameclass($format, $cm->get_section_info(), $cm); $activitybasis = html_writer::div( $courserenderer->render($cmname), 'activity-basis d-flex align-items-center'); $content = html_writer::div( $activitybasis . $badges, 'activity-item activity', ['data-activityname' => $cm->name] ); $this->content->items[] = $content; } } } return $this->content; } // Slow & hacky editing mode. $ismoving = ismoving($course->id); $section = $modinfo->get_section_info(0); if ($ismoving) { $strmovefull = strip_tags(get_string('movefull', '', "'$USER->activitycopyname'")); $strcancel= get_string('cancel'); } else { $strmove = get_string('move'); } if ($ismoving) { $this->content->icons[] = ' ' . $OUTPUT->pix_icon('t/move', get_string('move')); $cancelurl = new moodle_url('/course/mod.php', array('cancelcopy' => 'true', 'sesskey' => sesskey())); $this->content->items[] = $USER->activitycopyname . ' (<a href="' . $cancelurl . '">' . $strcancel . '</a>)'; } if (!empty($modinfo->sections[0])) { foreach ($modinfo->sections[0] as $modnumber) { $mod = $modinfo->cms[$modnumber]; if (!$mod->uservisible || !$mod->is_visible_on_course_page()) { continue; } if (!$ismoving) { $controlmenu = new $controlmenuclass( $format, $mod->get_section_info(), $mod, ['disableindentation' => true] ); $menu = $controlmenu->get_action_menu($OUTPUT); // Add a move primary action. $moveaction = html_writer::link( new moodle_url('/course/mod.php', ['sesskey' => sesskey(), 'copy' => $mod->id]), $OUTPUT->pix_icon('i/dragdrop', $strmove), ['class' => 'editing_move_activity'] ); $editbuttons = html_writer::tag('div', $courserenderer->render($controlmenu), ['class' => 'buttons activity-actions ml-auto'] ); } else { $editbuttons = ''; $moveaction = ''; } if ($mod->visible || has_capability('moodle/course:viewhiddenactivities', $mod->context)) { if ($ismoving) { if ($mod->id == $USER->activitycopy) { continue; } $movingurl = new moodle_url('/course/mod.php', array('moveto' => $mod->id, 'sesskey' => sesskey())); $this->content->items[] = html_writer::link($movingurl, '', array('title' => $strmovefull, 'class' => 'movehere')); $this->content->icons[] = ''; } $badges = ''; if (!$mod->visible) { $badges = html_writer::tag( 'span', get_string('hiddenfromstudents'), $badgeattributes ); } if ($mod->is_stealth()) { $badges = html_writer::tag( 'span', get_string('hiddenoncoursepage'), $badgeattributes ); } if (!$mod->url) { $activitybasis = html_writer::div( $mod->get_formatted_content(['overflowdiv' => true, 'noclean' => true]) . $editbuttons, 'activity-basis d-flex align-items-center'); $content = html_writer::div( $moveaction . $activitybasis . $badges, 'contentwithoutlink activity-item activity', ['data-activityname' => $mod->name] ); $this->content->items[] = $content; $this->content->icons[] = ''; } else { $cmname = new $cmnameclass($format, $mod->get_section_info(), $mod); $activitybasis = html_writer::div( $courserenderer->render($cmname) . $editbuttons, 'activity-basis d-flex align-items-center'); $content = html_writer::div( $moveaction . $activitybasis . $badges, 'activity-item activity', ['data-activityname' => $mod->name] ); $this->content->items[] = $content; } } } } if ($ismoving) { $movingurl = new moodle_url('/course/mod.php', array('movetosection' => $section->id, 'sesskey' => sesskey())); $this->content->items[] = html_writer::link($movingurl, '', array('title' => $strmovefull, 'class' => 'movehere')); $this->content->icons[] = ''; } $this->content->footer = $courserenderer->course_section_add_cm_control($course, 0, null, array('inblock' => true)); return $this->content; } } version.php 0000604 00000002257 15062104635 0006746 0 ustar 00 <?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/>. /** * Version details * * @package block_social_activities * @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com) * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX). $plugin->requires = 2023100400; // Requires this Moodle version. $plugin->component = 'block_social_activities'; // Full name of the plugin (used for diagnostics) lang/en/block_social_activities.php 0000604 00000002264 15062104635 0013452 0 ustar 00 <?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/>. /** * Strings for component 'block_social_activities', language 'en', branch 'MOODLE_20_STABLE' * * @package block_social_activities * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ $string['pluginname'] = 'Social activities'; $string['social_activities:addinstance'] = 'Add a new social activities block'; $string['privacy:metadata'] = 'The Social activities block only shows data stored in other locations.'; tests/behat/behat_block_social_activities.php 0000604 00000017751 15062104635 0015526 0 ustar 00 <?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/>. /** * Behat steps definitions for block social activities * * @package block_social_activities * @category test * @copyright 2016 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ // NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php. require_once(__DIR__ . '/../../../../lib/behat/behat_base.php'); use Behat\Mink\Exception\ExpectationException as ExpectationException, Behat\Mink\Exception\DriverException as DriverException, Behat\Mink\Exception\ElementNotFoundException as ElementNotFoundException; /** * Behat steps definitions for block social activities * * @package block_social_activities * @category test * @copyright 2016 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class behat_block_social_activities extends behat_base { /** * Returns the DOM node of the activity in the social activities block * * @throws ElementNotFoundException Thrown by behat_base::find * @param string $activityname The activity name * @return NodeElement */ protected function get_social_block_activity_node($activityname) { $activityname = behat_context_helper::escape($activityname); $xpath = "//*[contains(concat(' ',normalize-space(@class),' '),' block_social_activities ')]//li[contains(., $activityname)]"; return $this->find('xpath', $xpath); } /** * Checks that the specified activity in the social activities block should have the specified editing icon. * * This includes items in the action menu for the item (does not require it to be open) * * You should be in the course page with editing mode turned on. * * @Then /^"(?P<activity_name_string>(?:[^"]|\\")*)" activity in social activities block should have "(?P<icon_name_string>(?:[^"]|\\")*)" editing icon$/ * @param string $activityname * @param string $iconname */ public function activity_in_social_activities_block_should_have_editing_icon($activityname, $iconname) { $activitynode = $this->get_social_block_activity_node($activityname); $notfoundexception = new ExpectationException('"' . $activityname . '" doesn\'t have a "' . $iconname . '" editing icon', $this->getSession()); $this->find('named_partial', array('link', $iconname), $notfoundexception, $activitynode); } /** * Checks that the specified activity in the social activities block should not have the specified editing icon. * * This includes items in the action menu for the item (does not require it to be open) * * You should be in the course page with editing mode turned on. * * @Then /^"(?P<activity_name_string>(?:[^"]|\\")*)" activity in social activities block should not have "(?P<icon_name_string>(?:[^"]|\\")*)" editing icon$/ * @param string $activityname * @param string $iconname */ public function activity_in_social_activities_block_should_not_have_editing_icon($activityname, $iconname) { $activitynode = $this->get_social_block_activity_node($activityname); try { $this->find('named_partial', array('link', $iconname), false, $activitynode); throw new ExpectationException('"' . $activityname . '" has a "' . $iconname . '" editing icon when it should not', $this->getSession()); } catch (ElementNotFoundException $e) { // This is good, the menu item should not be there. } } /** * Clicks on the specified element of the activity. You should be in the course page with editing mode turned on. * * @Given /^I click on "(?P<element_string>(?:[^"]|\\")*)" "(?P<selector_string>(?:[^"]|\\")*)" in the "(?P<activity_name_string>(?:[^"]|\\")*)" activity in social activities block$/ * @param string $element * @param string $selectortype * @param string $activityname */ public function i_click_on_in_the_activity_in_social_activities_block($element, $selectortype, $activityname) { $element = $this->get_social_block_activity_element($element, $selectortype, $activityname); $element->click(); } /** * Finds the element containing a specific activity in the social activity block. * * @throws ElementNotFoundException * @param string $element * @param string $selectortype * @param string $activityname * @return NodeElement */ protected function get_social_block_activity_element($element, $selectortype, $activityname) { $activitynode = $this->get_social_block_activity_node($activityname); $exception = new ElementNotFoundException($this->getSession(), "'{$element}' '{$selectortype}' in '{$activityname}'"); return $this->find($selectortype, $element, $exception, $activitynode); } /** * Checks that the specified activity is hidden in the social activities block. * * @Then /^"(?P<activity_name_string>(?:[^"]|\\")*)" activity in social activities block should be hidden$/ * @param string $activityname */ public function activity_in_social_activities_block_should_be_hidden($activityname) { $activitynode = $this->get_social_block_activity_node($activityname); $exception = new ExpectationException('"' . $activityname . '" is not hidden', $this->getSession()); $this->find('named_partial', array('badge', get_string('hiddenfromstudents')), $exception, $activitynode); } /** * Checks that the specified activity is hidden in the social activities block. * * @Then /^"(?P<activity_name_string>(?:[^"]|\\")*)" activity in social activities block should be available but hidden from course page$/ * @param string $activityname */ public function activity_in_social_activities_block_should_be_available_but_hidden_from_course_page($activityname) { $activitynode = $this->get_social_block_activity_node($activityname); $exception = new ExpectationException('"' . $activityname . '" is not hidden but available', $this->getSession()); $this->find('named_partial', array('badge', get_string('hiddenoncoursepage')), $exception, $activitynode); } /** * Opens an activity actions menu in the social activities block if it is not already opened. * * @Given /^I open "(?P<activity_name_string>(?:[^"]|\\")*)" actions menu in social activities block$/ * @throws DriverException The step is not available when Javascript is disabled * @param string $activityname */ public function i_open_actions_menu_in_social_activities_block($activityname) { $activityname = behat_context_helper::escape($activityname); $xpath = "//*[contains(concat(' ',normalize-space(@class),' '),' block_social_activities ')]//li[contains(., $activityname)]"; $this->execute('behat_action_menu::i_open_the_action_menu_in', [$xpath, 'xpath_element']); } /** * Return the list of partial named selectors. * * @return array */ public static function get_partial_named_selectors(): array { return [ new behat_component_named_selector('Activity', [ "//*[contains(concat(' ',normalize-space(@class),' '),' block_social_activities ')]//li[contains(., %locator%)]", ]), ]; } } tests/behat/edit_activities.feature 0000604 00000006756 15062104635 0013533 0 ustar 00 @block @block_social_activities @format_social Feature: Edit activities in social activities block In order to use social activities block As a teacher I need to add and edit activities there Background: Given the following "courses" exist: | fullname | shortname | format | | Course 1 | C1 | social | And the following "users" exist: | username | firstname | lastname | | user1 | User | One | | student1 | Student | One | And the following "course enrolments" exist: | user | course | role | | user1 | C1 | editingteacher | | student1 | C1 | student | @javascript Scenario: Edit name of activity in-place in social activities block Given the following "activities" exist: | activity | course | name | | forum | C1 | My forum name | And I log in as "user1" And I am on "Course 1" course homepage with editing mode on When I set the field "Edit title" in the "My forum name" "block_social_activities > Activity" to "New forum name" Then I should not see "My forum name" in the "Social activities" "block" And I should see "New forum name" And I follow "New forum name" And I should not see "My forum name" And I should see "New forum name" @javascript Scenario: Activities in social activities block can be made available but not visible on a course page Given the following config values are set as admin: | allowstealth | 1 | And the following "blocks" exist: | blockname | contextlevel | reference | pagetypepattern | defaultregion | | recent_activity | Course | C1 | course-view-* | side-pre | And I log in as "user1" And I am on "Course 1" course homepage with editing mode on And I press "Add an activity or resource" And I click on "Add a new Forum" "link" in the "Add an activity or resource" "dialogue" And I set the field "Forum name" to "My forum name" And I press "Save and return to course" When I open "My forum name" actions menu in social activities block And I choose "Availability > Make available but don't show on course page" in the open action menu Then I should see "Available but not shown on course page" in the "My forum name" "core_courseformat > Activity visibility" # Make sure that "Availability" dropdown in the edit menu has three options. And I open "My forum name" actions menu in social activities block And I click on "Edit settings" "link" in the "My forum name" activity in social activities block And I expand all fieldsets And the "Availability" select box should contain "Show on course page" And the "Availability" select box should contain "Hide on course page" And the field "Availability" matches value "Make available but don't show on course page" And I press "Save and return to course" And "My forum name" activity in social activities block should be available but hidden from course page And I turn editing mode off And "My forum name" activity in social activities block should be available but hidden from course page And I log out # Student will not see the module on the course page but can access it from other reports and blocks: When I am on the "Course 1" course page logged in as student1 Then I should not see "My forum name" in the "Social activities" "block" And I click on "My forum name" "link" in the "Recent activity" "block" And I should see "My forum name" in the ".breadcrumb" "css_element" classes/privacy/provider.php 0000604 00000003015 15062104635 0012216 0 ustar 00 <?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/>. /** * Privacy Subsystem implementation for block_social_activities. * * @package block_social_activities * @copyright 2018 Zig Tan <zig@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace block_social_activities\privacy; defined('MOODLE_INTERNAL') || die(); /** * Privacy Subsystem for block_social_activities implementing null_provider. * * @copyright 2018 Zig Tan <zig@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class provider implements \core_privacy\local\metadata\null_provider { /** * Get the language string identifier with the component's language * file to explain why this plugin stores no data. * * @return string */ public static function get_reason() : string { return 'privacy:metadata'; } } styles.css 0000604 00000000403 15062104635 0006574 0 ustar 00 .block_social_activities li { clear: both; } .block_social_activities li .column { width: 100%; } .block_social_activities li .buttons a img { vertical-align: text-bottom; } .block_social_activities .instancename { word-break: break-all; } db/access.php 0000604 00000002445 15062104635 0007106 0 ustar 00 <?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/>. /** * Social activities block caps. * * @package block_social_activities * @copyright Mark Nelson <markn@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); $capabilities = array( 'block/social_activities:addinstance' => array( 'riskbitmask' => RISK_SPAM | RISK_XSS, 'captype' => 'write', 'contextlevel' => CONTEXT_BLOCK, 'archetypes' => array( 'editingteacher' => CAP_ALLOW, 'manager' => CAP_ALLOW ), 'clonepermissionsfrom' => 'moodle/site:manageblocks' ), );
| ver. 1.4 |
Github
|
.
| PHP 8.1.33 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка