Skip to content

Commit

Permalink
Merge branch 'MDL-372-int-master' of git://github.com/ryanwyllie/moodle
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewnicols committed Jan 13, 2016
2 parents 75e7c85 + f9621c5 commit a041808
Show file tree
Hide file tree
Showing 27 changed files with 943 additions and 134 deletions.
3 changes: 2 additions & 1 deletion blocks/news_items/block_news_items.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,8 @@ function get_content() {
// descending order. The call to default sort order here will use
// that unless the discussion that post is in has a timestart set
// in the future.
$sort = forum_get_default_sort_order(true, 'p.modified');
// This sort will ignore pinned posts as we want the most recent.
$sort = forum_get_default_sort_order(true, 'p.modified', 'd', false);
if (! $discussions = forum_get_discussions($cm, $sort, false,
$currentgroup, $this->page->course->newsitems) ) {
$text .= '('.get_string('nonews', 'forum').')';
Expand Down
2 changes: 1 addition & 1 deletion mod/forum/backup/moodle2/backup_forum_stepslib.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ protected function define_structure() {
$discussion = new backup_nested_element('discussion', array('id'), array(
'name', 'firstpost', 'userid', 'groupid',
'assessed', 'timemodified', 'usermodified', 'timestart',
'timeend'));
'timeend', 'pinned'));

$posts = new backup_nested_element('posts');

Expand Down
123 changes: 123 additions & 0 deletions mod/forum/classes/event/discussion_pinned.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
<?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/>.
/**
* The mod_forum discussion pinned event.
*
* @package mod_forum
* @copyright 2014 Charles Fulton <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace mod_forum\event;
defined('MOODLE_INTERNAL') || die();

/**
* The mod_forum discussion pinned event.
*
* @package mod_forum
* @copyright 2014 Charles Fulton <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class discussion_pinned extends \core\event\base {
/**
* Init method.
*
* @return void
*/
protected function init() {
$this->data['crud'] = 'u';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->data['objecttable'] = 'forum_discussions';
}

/**
* Returns description of what happened.
*
* @return string
*/
public function get_description() {
return "The user {$this->userid} has pinned the discussion {$this->objectid} in the forum {$this->other['forumid']}";
}

/**
* Return localised event name.
*
* @return string
*/
public static function get_name() {
return get_string('eventdiscussionpinned', 'mod_forum');
}

/**
* Get URL related to the action
*
* @return \moodle_url
*/
public function get_url() {
return new \moodle_url('/mod/forum/discuss.php', array('d' => $this->objectid));
}

/**
* Return the legacy event log data.
*
* @return array|null
*/
protected function get_legacy_logdata() {
// The legacy log table expects a relative path to /mod/forum/.
$logurl = substr($this->get_url()->out_as_local_url(), strlen('/mod/forum/'));
return array($this->courseid, 'forum', 'pin discussion', $logurl, $this->objectid, $this->contextinstanceid);
}

/**
* Custom validation.
*
* @throws \coding_exception
* @return void
*/
protected function validate_data() {
parent::validate_data();
if (!isset($this->other['forumid'])) {
throw new \coding_exception('forumid must be set in $other.');
}
if ($this->contextlevel != CONTEXT_MODULE) {
throw new \coding_exception('Context passed must be module context.');
}
if (!isset($this->objectid)) {
throw new \coding_exception('objectid must be set to the discussionid.');
}
}

/**
* Forum discussion object id mappings.
*
* @return array
*/
public static function get_objectid_mapping() {
return array('db' => 'forum_discussions', 'restore' => 'forum_discussion');
}

/**
* Forum id mappings.
*
* @return array
*/
public static function get_other_mapping() {
$othermapped = array();
$othermapped['forumid'] = array('db' => 'forum', 'restore' => 'forum');

return $othermapped;
}
}
123 changes: 123 additions & 0 deletions mod/forum/classes/event/discussion_unpinned.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
<?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/>.
/**
* The mod_forum discussion unpinned event.
*
* @package mod_forum
* @copyright 2014 Charles Fulton <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace mod_forum\event;
defined('MOODLE_INTERNAL') || die();

/**
* The mod_forum discussion unpinned event.
*
* @package mod_forum
* @copyright 2014 Charles Fulton <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class discussion_unpinned extends \core\event\base {
/**
* Init method.
*
* @return void
*/
protected function init() {
$this->data['crud'] = 'u';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->data['objecttable'] = 'forum_discussions';
}

/**
* Returns description of what happened.
*
* @return string
*/
public function get_description() {
return "The user {$this->userid} has unpinned the discussion {$this->objectid} in the forum {$this->other['forumid']}";
}

/**
* Return localised event name.
*
* @return string
*/
public static function get_name() {
return get_string('eventdiscussionunpinned', 'mod_forum');
}

/**
* Get URL related to the action
*
* @return \moodle_url
*/
public function get_url() {
return new \moodle_url('/mod/forum/discuss.php', array('d' => $this->objectid));
}

/**
* Return the legacy event log data.
*
* @return array|null
*/
protected function get_legacy_logdata() {
// The legacy log table expects a relative path to /mod/forum/.
$logurl = substr($this->get_url()->out_as_local_url(), strlen('/mod/forum/'));
return array($this->courseid, 'forum', 'unpin discussion', $logurl, $this->objectid, $this->contextinstanceid);
}

/**
* Custom validation.
*
* @throws \coding_exception
* @return void
*/
protected function validate_data() {
parent::validate_data();
if (!isset($this->other['forumid'])) {
throw new \coding_exception('forumid must be set in $other.');
}
if ($this->contextlevel != CONTEXT_MODULE) {
throw new \coding_exception('Context passed must be module context.');
}
if (!isset($this->objectid)) {
throw new \coding_exception('objectid must be set to the discussionid.');
}
}

/**
* Forum discussion object id mappings.
*
* @return array
*/
public static function get_objectid_mapping() {
return array('db' => 'forum_discussions', 'restore' => 'forum_discussion');
}

/**
* Forum id mappings.
*
* @return array
*/
public static function get_other_mapping() {
$othermapped = array();
$othermapped['forumid'] = array('db' => 'forum', 'restore' => 'forum');

return $othermapped;
}
}
5 changes: 5 additions & 0 deletions mod/forum/classes/post_form.php
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,11 @@ function definition() {
$mform->addHelpButton('attachments', 'attachment', 'forum');
}

if (!$post->parent && has_capability('mod/forum:pindiscussions', $modcontext)) {
$mform->addElement('checkbox', 'pinned', get_string('discussionpinned', 'forum'));
$mform->addHelpButton('pinned', 'discussionpinned', 'forum');
}

if (empty($post->id) && $manageactivities) {
$mform->addElement('checkbox', 'mailnow', get_string('mailnow', 'forum'));
}
Expand Down
11 changes: 11 additions & 0 deletions mod/forum/db/access.php
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,17 @@
)
),

'mod/forum:pindiscussions' => array(

'captype' => 'write',
'contextlevel' => CONTEXT_MODULE,
'archetypes' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'manager' => CAP_ALLOW
)
),

'mod/forum:editanypost' => array(

'riskbitmask' => RISK_SPAM,
Expand Down
3 changes: 2 additions & 1 deletion mod/forum/db/install.xml
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<XMLDB PATH="mod/forum/db" VERSION="20141028" COMMENT="XMLDB file for Moodle mod/forum"
<XMLDB PATH="mod/forum/db" VERSION="20160113" COMMENT="XMLDB file for Moodle mod/forum"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
>
Expand Down Expand Up @@ -52,6 +52,7 @@
<FIELD NAME="usermodified" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
<FIELD NAME="timestart" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
<FIELD NAME="timeend" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
<FIELD NAME="pinned" TYPE="int" LENGTH="1" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
Expand Down
29 changes: 16 additions & 13 deletions mod/forum/db/log.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,22 @@

defined('MOODLE_INTERNAL') || die();

global $DB; // TODO: this is a hack, we should really do something with the SQL in SQL tables
global $DB; // TODO: this is a hack, we should really do something with the SQL in SQL tables.

$logs = array(
array('module'=>'forum', 'action'=>'add', 'mtable'=>'forum', 'field'=>'name'),
array('module'=>'forum', 'action'=>'update', 'mtable'=>'forum', 'field'=>'name'),
array('module'=>'forum', 'action'=>'add discussion', 'mtable'=>'forum_discussions', 'field'=>'name'),
array('module'=>'forum', 'action'=>'add post', 'mtable'=>'forum_posts', 'field'=>'subject'),
array('module'=>'forum', 'action'=>'update post', 'mtable'=>'forum_posts', 'field'=>'subject'),
array('module'=>'forum', 'action'=>'user report', 'mtable'=>'user', 'field'=>$DB->sql_concat('firstname', "' '" , 'lastname')),
array('module'=>'forum', 'action'=>'move discussion', 'mtable'=>'forum_discussions', 'field'=>'name'),
array('module'=>'forum', 'action'=>'view subscribers', 'mtable'=>'forum', 'field'=>'name'),
array('module'=>'forum', 'action'=>'view discussion', 'mtable'=>'forum_discussions', 'field'=>'name'),
array('module'=>'forum', 'action'=>'view forum', 'mtable'=>'forum', 'field'=>'name'),
array('module'=>'forum', 'action'=>'subscribe', 'mtable'=>'forum', 'field'=>'name'),
array('module'=>'forum', 'action'=>'unsubscribe', 'mtable'=>'forum', 'field'=>'name'),
array('module' => 'forum', 'action' => 'add', 'mtable' => 'forum', 'field' => 'name'),
array('module' => 'forum', 'action' => 'update', 'mtable' => 'forum', 'field' => 'name'),
array('module' => 'forum', 'action' => 'add discussion', 'mtable' => 'forum_discussions', 'field' => 'name'),
array('module' => 'forum', 'action' => 'add post', 'mtable' => 'forum_posts', 'field' => 'subject'),
array('module' => 'forum', 'action' => 'update post', 'mtable' => 'forum_posts', 'field' => 'subject'),
array('module' => 'forum', 'action' => 'user report', 'mtable' => 'user',
'field' => $DB->sql_concat('firstname', "' '", 'lastname')),
array('module' => 'forum', 'action' => 'move discussion', 'mtable' => 'forum_discussions', 'field' => 'name'),
array('module' => 'forum', 'action' => 'view subscribers', 'mtable' => 'forum', 'field' => 'name'),
array('module' => 'forum', 'action' => 'view discussion', 'mtable' => 'forum_discussions', 'field' => 'name'),
array('module' => 'forum', 'action' => 'view forum', 'mtable' => 'forum', 'field' => 'name'),
array('module' => 'forum', 'action' => 'subscribe', 'mtable' => 'forum', 'field' => 'name'),
array('module' => 'forum', 'action' => 'unsubscribe', 'mtable' => 'forum', 'field' => 'name'),
array('module' => 'forum', 'action' => 'pin discussion', 'mtable' => 'forum_discussions', 'field' => 'name'),
array('module' => 'forum', 'action' => 'unpin discussion', 'mtable' => 'forum_discussions', 'field' => 'name'),
);
13 changes: 13 additions & 0 deletions mod/forum/db/upgrade.php
Original file line number Diff line number Diff line change
Expand Up @@ -253,5 +253,18 @@ function xmldb_forum_upgrade($oldversion) {
// Moodle v3.0.0 release upgrade line.
// Put any upgrade step following this.

if ($oldversion < 2015120800) {

// Add support for pinned discussions.
$table = new xmldb_table('forum_discussions');
$field = new xmldb_field('pinned', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'timeend');

if (!$dbman->field_exists($table, $field)) {
$dbman->add_field($table, $field);
}

// Forum savepoint reached.
upgrade_mod_savepoint(true, 2015120800, 'forum');
}
return true;
}
Loading

0 comments on commit a041808

Please sign in to comment.