[MDL-22112]

Finishing some todos and fixing some bugs
This commit is contained in:
Jordi Piguillem
2010-05-21 11:07:43 +00:00
parent 7ff7f704d1
commit 74c6a62c73
5 changed files with 225 additions and 188 deletions
+24 -21
View File
@@ -15,9 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
require_once('../../config.php');
require_once(dirname(__FILE__).'/create_form.php');
require_once(dirname(__FILE__) . '/create_form.php');
require_once($CFG->dirroot . '/mod/wiki/lib.php');
require_once($CFG->dirroot . '/mod/wiki/locallib.php');
require_once($CFG->dirroot . '/mod/wiki/pagelib.php');
@@ -29,11 +28,11 @@ require_once($CFG->dirroot . '/mod/wiki/pagelib.php');
// page editing page.
$action = optional_param('action', 'new', PARAM_TEXT);
// The title of the new page, can be empty
$title = optional_param('title', '', PARAM_TEXT);
$swid = optional_param('swid', 0, PARAM_INT);
$wid = optional_param('wid', 0, PARAM_INT);
$gid = optional_param('gid', 0, PARAM_INT);
$uid = optional_param('uid', 0, PARAM_INT);
$title = optional_param('title', '', PARAM_TEXT);
$wid = optional_param('wid', 0, PARAM_INT);
$swid = optional_param('swid', 0, PARAM_INT);
$gid = optional_param('gid', 0, PARAM_INT);
$uid = optional_param('uid', 0, PARAM_INT);
// 'create' action must be submitted by moodle form
// so sesskey must be checked
@@ -43,22 +42,20 @@ if ($action == 'create') {
}
}
$swiki = null;
if (!empty($swid)) {
$subwiki = wiki_get_subwiki($swid);
if (!empty($wid)) {
// @TODO: Check for capabilities
if (!$swid = wiki_add_subwiki($wid, $gid, $uid)) {
print_error('invalidwikiid');
if (!$wiki = wiki_get_wiki($subwiki->wikiid)) {
print_error('invalidwikiid', 'wiki');
}
}
} else {
$subwiki = wiki_get_subwiki_by_group($wid, $gid, $uid);
if (!$subwiki = wiki_get_subwiki($swid)) {
print_error('invalidswid', 'wiki');
}
if (!$wiki = wiki_get_wiki($wid)) {
print_error('invalidwikiid', 'wiki');
}
if (!$wiki = wiki_get_wiki($subwiki->wikiid)) {
print_error('invalidwikiid', 'wiki');
}
if (!$cm = get_coursemodule_from_instance('wiki', $wiki->id)) {
@@ -71,12 +68,18 @@ if (!$course = get_course_by_id($cm->course)) {
require_course_login($course->id, true, $cm);
add_to_log($course->id, 'createpage', 'createpage', 'view.php?id='.$cm->id, $wiki->id);
add_to_log($course->id, 'createpage', 'createpage', 'view.php?id=' . $cm->id, $wiki->id);
$wikipage = new page_wiki_create($wiki, $subwiki, $cm);
$wikipage->set_gid($gid);
$wikipage->set_swid($swid);
if (!empty($swid)) {
$wikipage->set_gid($subwiki->groupid);
$wikipage->set_uid($subwiki->userid);
} else {
$wikipage->set_gid($gid);
$wikipage->set_uid($uid);
}
if (!empty($title)) {
$wikipage->set_title($title);
} else {
-8
View File
@@ -197,13 +197,6 @@ function wiki_get_version($versionid) {
*/
function wiki_get_first_page($subwikid, $module = null) {
global $DB, $USER;
// TODO:
// not sure if we should use current userid
$extra = '';
if ($module && $module->wikimode == 'individual') {
$extra = ' AND p.userid=' . $USER->id;
}
$sql = 'SELECT p.* ' .
'FROM {wiki} w, {wiki_subwikis} s, {wiki_pages} p ' .
@@ -211,7 +204,6 @@ function wiki_get_first_page($subwikid, $module = null) {
's.wikiid = w.id AND ' .
'w.firstpagetitle = p.title AND ' .
'p.subwikiid = s.id';
$sql .= $extra;
return $DB->get_record_sql($sql, array($subwikid));
}
+21 -5
View File
@@ -64,6 +64,10 @@ abstract class page_wiki {
*/
protected $gid;
/**
* @var int Current user ID
*/
protected $uid;
/**
* @var array The tabs set used in wiki module
*/
@@ -194,6 +198,14 @@ abstract class page_wiki {
$this->gid = $gid;
}
/**
* Method to set current user id
* @param int $uid Current user id
*/
function set_uid($uid) {
$this->uid = $uid;
}
/**
* Method to set the URL of the page.
* This method must be overwritten by every type of page.
@@ -346,7 +358,7 @@ class page_wiki_edit extends page_wiki {
global $CFG, $PAGE;
parent::__construct($wiki, $subwiki, $cm);
self::$attachmentoptions = array(
'subdirs' => false,
'subdirs' => false,
'maxfiles' => -1,
'maxbytes' => $CFG->maxbytes,
'accepted_types'=>'*'
@@ -522,7 +534,7 @@ class page_wiki_edit extends page_wiki {
$data->newcontentformat = FORMAT_HTML;
$data = file_prepare_standard_editor($data, 'newcontent', page_wiki_edit::$attachmentoptions, $context, 'wiki_attachments', $this->subwiki->id);
break;
default:
default:
//$draftitemid = file_get_submitted_draft_itemid('attachments');
//file_prepare_draft_area($draftitemid, $context->id, 'wiki_attachments', $this->subwiki->id);
//$data->attachments = $draftitemid;
@@ -872,10 +884,11 @@ class page_wiki_create extends page_wiki {
}
function set_action($action) {
global $PAGE;
$this->action = $action;
require_once(dirname(__FILE__) . '/create_form.php');
$url = new moodle_url('/mod/wiki/create.php', array('action' => 'create', 'swid' => $this->swid));
$url = new moodle_url('/mod/wiki/create.php', array('action' => 'create', 'wid' => $PAGE->activityrecord->id, 'gid' => $this->gid, 'uid' => $this->uid));
$formats = wiki_get_formats();
$options = array('formats' => $formats);
if ($this->title != get_string('newpage', 'wiki')) {
@@ -894,7 +907,6 @@ class page_wiki_create extends page_wiki {
global $PAGE;
$context = get_context_instance(CONTEXT_MODULE, $PAGE->cm->id);
$wiki = wiki_get_wiki($this->swid);
// @TODO: Change this to has_capability and show an alternative interface.
require_capability('mod/wiki:createpage', $context, NULL, true, 'nocreatepermission', 'wiki');
@@ -909,8 +921,12 @@ class page_wiki_create extends page_wiki {
}
function create_page() {
global $USER, $CFG;
global $USER, $CFG, $PAGE;
$data = $this->mform->get_data();
if (empty($this->subwiki)){
$swid = wiki_add_subwiki($PAGE->activityrecord->id, $this->gid, $this->uid);
$this->subwiki = wiki_get_subwiki($swid);
}
$id = wiki_create_page($this->subwiki->id, $data->pagetitle, $data->pageformat, $USER->id);
redirect($CFG->wwwroot . '/mod/wiki/edit.php?pageid=' . $id);
}
+65 -20
View File
@@ -36,7 +36,7 @@ class mod_wiki_renderer extends plugin_renderer_base {
// @TODO: Fix call to wiki_get_subwiki_by_group
$gid = groups_get_activity_group($this->page->cm);
$gid = !empty($gid)?$gid:0;
$gid = !empty($gid) ? $gid : 0;
if (!$subwiki = wiki_get_subwiki_by_group($this->page->cm->instance, $gid)) {
return false;
}
@@ -314,20 +314,17 @@ class mod_wiki_renderer extends plugin_renderer_base {
// Only people with these capabilities can view all wikis
if ($view && $manage) {
// @TODO: Print here a combo that contains all users.
$subwikis = wiki_get_subwikis($wiki->id);
$users = get_enrolled_users($context);
$options = array();
foreach ($subwikis as $subwiki) {
if ($subwiki->userid == 0) {
continue;
}
$user = user_get_users_by_id(array($subwiki->userid));
$options[$subwiki->id] = fullname($user[$subwiki->userid]);
foreach ($users as $user) {
$options[$user->id] = fullname($user);
}
echo $this->output->container_start('wiki_right');
$url = $CFG->wwwroot . '/mod/wiki/view.php?pageid=' . $page->id;
$name = 'swid';
$selected = $page->subwikiid;
$params = array('wid' => $wiki->id, 'title' => $page->title);
$url = new moodle_url('/mod/wiki/view.php', $params);
$name = 'uid';
$selected = $subwiki->userid;
echo $this->output->single_select($url, $name, $options, $selected);
echo $this->output->container_end();
}
@@ -340,7 +337,7 @@ class mod_wiki_renderer extends plugin_renderer_base {
if ($wiki->wikimode == 'collaborative') {
// We need to print a select to choose a course group
$params = 'pageid=' . $page->id;
$params = 'wid=' . $wiki->id . '&amp;title=' . urlencode($page->title);
echo $this->output->container_start('wiki_right');
groups_print_activity_menu($cm, $CFG->wwwroot . '/mod/wiki/view.php?' . $params);
@@ -348,10 +345,41 @@ class mod_wiki_renderer extends plugin_renderer_base {
return;
} else if ($wiki->wikimode == 'individual') {
// @TODO: Print here a combo that contains all users of that subwiki.
$view = has_capability('mod/wiki:viewpage', $context, $USER);
$manage = has_capability('mod/wiki:managewiki', $context, $USER);
// Only people with these capabilities can view all wikis
if ($view && $manage) {
$users = get_enrolled_users($context);
$options = array();
foreach ($users as $user) {
$groups = groups_get_all_groups($cm->course, $user->id);
if (!empty($groups)) {
foreach ($groups as $group) {
$options[$group->id][$group->name][$group->id . '-' . $user->id] = fullname($user);
}
} else {
$name = get_string('notingroup', 'wiki');
$options[0][$name]['0' . '-' . $user->id] = fullname($user);
}
}
} else {
$group = groups_get_group($subwiki->groupid);
$users = groups_get_members($subwiki->groupid);
foreach ($users as $user) {
$options[$group->id][$group->name][$group->id . '-' . $user->id] = fullname($user);
}
}
echo $this->output->container_start('wiki_right');
echo "TODO: Print here a combo to choose user wiki from that subwiki";
$params = array('wid' => $wiki->id, 'title' => $page->title);
$url = new moodle_url('/mod/wiki/view.php', $params);
$name = 'groupanduser';
$selected = $subwiki->groupid . '-' . $subwiki->userid;
echo $this->output->single_select($url, $name, $options, $selected);
echo $this->output->container_end();
return;
} else {
// error
return;
@@ -359,8 +387,7 @@ class mod_wiki_renderer extends plugin_renderer_base {
CASE VISIBLEGROUPS:
if ($wiki->wikimode == 'collaborative') {
// We need to print a select to choose a course group
$params = 'pageid=' . $page->id;
$params = 'wid=' . $wiki->id . '&amp;title=' . urlencode($page->title);
echo $this->output->container_start('wiki_right');
groups_print_activity_menu($cm, $CFG->wwwroot . '/mod/wiki/view.php?' . $params);
@@ -368,10 +395,28 @@ class mod_wiki_renderer extends plugin_renderer_base {
return;
} else if ($wiki->wikimode == 'individual') {
// @TODO: Print here a combo that contains all users of that wiki grouped by group.
$users = get_enrolled_users($context);
$options = array();
foreach ($users as $user) {
$groups = groups_get_all_groups($cm->course, $user->id);
if (!empty($groups)) {
foreach ($groups as $group) {
$options[$group->id][$group->name][$group->id . '-' . $user->id] = fullname($user);
}
} else {
$name = get_string('notingroup', 'wiki');
$options[0][$name]['0' . '-' . $user->id] = fullname($user);
}
}
echo $this->output->container_start('wiki_right');
echo "TODO: Print here a combo to choose user wiki from that wiki";
$params = array('wid' => $wiki->id, 'title' => $page->title);
$url = new moodle_url('/mod/wiki/view.php', $params);
$name = 'groupanduser';
$selected = $subwiki->groupid . '-' . $subwiki->userid;
echo $this->output->single_select($url, $name, $options, $selected);
echo $this->output->container_end();
return;
} else {
@@ -393,10 +438,10 @@ class mod_wiki_renderer extends plugin_renderer_base {
$items[] = get_string($opt, 'wiki');
}
$selectoptions = array();
foreach ($items as $key=>$item) {
$selectoptions[$key+1] = $item;
foreach ($items as $key => $item) {
$selectoptions[$key + 1] = $item;
}
$select = new single_select(new moodle_url('/mod/wiki/map.php', array('pageid'=>$pageid)), 'option', $selectoptions, $currentselect);
$select = new single_select(new moodle_url('/mod/wiki/map.php', array('pageid' => $pageid)), 'option', $selectoptions, $currentselect);
$select->label = get_string('mapmenu', 'wiki') . ': ';
return $this->output->container($this->output->render($select), 'midpad');
}
+115 -134
View File
@@ -36,15 +36,20 @@ require_once($CFG->dirroot . '/mod/wiki/lib.php');
require_once($CFG->dirroot . '/mod/wiki/locallib.php');
require_once($CFG->dirroot . '/mod/wiki/pagelib.php');
$currentgroup = optional_param('group', 0, PARAM_INT); // Group ID
$userid = optional_param('userid', 0, PARAM_INT); // User ID
$title = optional_param('title', '', PARAM_TEXT); // Page Title
$action = optional_param('action', '', PARAM_ALPHA);
$id = optional_param('id', 0, PARAM_INT); // Course Module ID
$swid = optional_param('swid', 0, PARAM_INT); // Subwiki ID
$id = optional_param('id', 0, PARAM_INT); // Course Module ID
$pageid = optional_param('pageid', 0, PARAM_INT); // Page ID
$wid = optional_param('wid', 0, PARAM_INT); // Wiki ID
$edit = optional_param('edit', -1, PARAM_BOOL);
$wid = optional_param('wid', 0, PARAM_INT); // Wiki ID
$title = optional_param('title', '', PARAM_TEXT); // Page Title
$currentgroup = optional_param('group', 0, PARAM_INT); // Group ID
$userid = optional_param('uid', 0, PARAM_INT); // User ID
$groupanduser = optional_param('groupanduser', 0, PARAM_TEXT);
$edit = optional_param('edit', -1, PARAM_BOOL);
$action = optional_param('action', '', PARAM_ALPHA);
$swid = optional_param('swid', 0, PARAM_INT); // Subwiki ID
/*
* Case 0:
@@ -78,38 +83,26 @@ if ($id) {
// Getting current group id
$currentgroup = groups_get_activity_group($cm);
$currentgroup = !empty($currentgroup)?$currentgroup:0;
$currentgroup = !empty($currentgroup) ? $currentgroup : 0;
// Getting current user id
if ($wiki->wikimode == 'individual'){
if (empty($userid)){
$userid = $USER->id;
}
if ($wiki->wikimode == 'individual') {
$userid = $USER->id;
} else {
$userid = 0;
}
$subwiki = wiki_get_subwiki_by_group($wiki->id, $currentgroup, $userid);
$page = null;
if (!empty($subwiki)){
$page = wiki_get_first_page($subwiki->id, $wiki);
}
if (!empty($page)){
$pageid = $page->id;
} else {
// the first page doesn't exist, create first page automatically
// Then redirct to editing page
$page = null;
$title = $wiki->firstpagetitle;
$default = $wiki->defaultformat;
if (empty($subwiki)) {
if (!$swid = wiki_add_subwiki($wiki->id, $currentgroup, $userid)) {
print_error('invalidwikiid');
}
} else {
$swid = $subwiki->id;
}
$id = wiki_create_page($swid, $title, $default, $USER->id);
redirect($CFG->wwwroot . '/mod/wiki/edit.php?pageid=' . $id);
// Getting subwiki. If it does not exists, redirecting to create page
if (!$subwiki = wiki_get_subwiki_by_group($wiki->id, $currentgroup, $userid)) {
$params = array('wid' => $wiki->id, 'gid' => $currentgroup, 'uid' => $userid, 'title' => $wiki->firstpagetitle);
$url = new moodle_url('/mod/wiki/create.php', $params);
redirect($url);
}
// Getting first page. If it does not exists, redirecting to create page
if (!$page = wiki_get_first_page($subwiki->id, $wiki)) {
$params = array('swid' => $wiki->id, 'title' => $wiki->firstpagetitle);
$url = new moodle_url('/mod/wiki/create.php', $params);
redirect($url);
}
/*
@@ -117,12 +110,7 @@ if ($id) {
*
* A user wants to see a page.
*
* If group is set, system must show the page with the same name from another group.
* In this case, is probable that there is no version of that page for the
* given group
*
* URL Params: pageid -> page id
* group -> group id (optional)
*
*/
} elseif ($pageid) {
@@ -131,24 +119,9 @@ if ($id) {
if (!$page = wiki_get_page($pageid)) {
print_error('incorrectpageid', 'wiki');
}
if (!empty($swid)){
// User wants to view another subwiki
if ($subwiki = wiki_get_subwiki($swid)){
// Trying to get the same page but from another subwiki
if (!$page = wiki_get_page_by_title($swid, $page->title)) {
// That page does not exists
// Getting the first page of that wiki
$wiki = wiki_get_wiki($subwiki->wikiid);
if (!$page = wiki_get_page_by_title($swid, $wiki->firstpagetitle)){
$url = new moodle_url('/mod/wiki/view.php', array('id'=>$subwiki->id));
print_error('individualpagedoesnotexist', 'wiki', $url->out());
}
}
} else {
print_error('incorrectsubwikiid', 'wiki');
}
} else if (!$subwiki = wiki_get_subwiki($page->subwikiid)) {
// Checking subwiki
if (!$subwiki = wiki_get_subwiki($page->subwikiid)) {
print_error('incorrectsubwikiid', 'wiki');
}
@@ -167,53 +140,30 @@ if ($id) {
print_error('coursemisconf');
}
// Switching to the correct page and subwiki if group param is present
if ($currentgroup = groups_get_activity_group($cm)) {
if ($subwiki->groupid != $currentgroup) {
// Setting new subwiki instance
// @TODO: Fix call to wiki_get_subwiki_by_group
$subwiki = wiki_get_subwiki_by_group($wiki->id, $currentgroup);
// Setting new page instance or page title
$title = $page->title;
if ($page = wiki_get_page_by_title($subwiki->id, $page->title)) {
unset($title);
}
}
}
/*
* Case 2:
*
* Trying to read a page by using subwiki->id and title.
* Trying to read a page from another group or user
*
* Page can exists or not.
* * If it exists, page must be shown
* * If it does not exists, system must ask for its creation
*
* URL params: swid -> subwiki id
* title -> a page title
* URL params: wid -> subwiki id (required)
* title -> a page title (required)
* group -> group id (optional)
* uid -> user id (optional)
* groupanduser -> (optional)
*/
} elseif ($swid && $title) {
// Getting subwiki instance
if (!$subwiki = wiki_get_subwiki($swid)) {
print_error('incorrectsubwikiid', 'wiki');
}
// Checking is there is a page with this title
if ($page = wiki_get_page_by_title($swid, $title)) {
unset($title);
}
} elseif ($wid && $title) {
// Setting wiki instance
if (!$wiki = wiki_get_wiki($subwiki->wikiid)) {
if (!$wiki = wiki_get_wiki($wid)) {
print_error('incorrectwikiid', 'wiki');
}
// Checking course module
if (!$cm = get_coursemodule_from_instance("wiki", $subwiki->wikiid)) {
if (!$cm = get_coursemodule_from_instance("wiki", $wiki->id)) {
print_error('invalidcoursemodule');
}
@@ -222,66 +172,97 @@ if ($id) {
print_error('coursemisconf');
}
/*
* Case 3:
*
* A user switches group when is 'reading' a non-existent page.
*
* URL Params: wid -> wiki id
* title -> page title
* currentgroup -> group id
*
*/
} elseif ($wid && $title && $currentgroup) {
// Checking wiki instance
if (!$wiki = wiki_get_wiki($wid)) {
print_error('incorrectwikiid', 'wiki');
$groupmode = groups_get_activity_groupmode($cm);
if (empty($currentgroup)) {
$currentgroup = groups_get_activity_group($cm);
$currentgroup = !empty($currentgroup) ? $currentgroup : 0;
}
// Checking subwiki instance
// @TODO: Fix call to wiki_get_subwiki_by_group
if (!$currentgroup = groups_get_activity_group($cm)){
$currentgroup = 0;
}
if (!$subwiki = wiki_get_subwiki_by_group($wid, $currentgroup)) {
print_error('incorrectsubwikiid', 'wiki');
if ($wiki->wikimode == 'individual' && ($groupmode == SEPARATEGROUPS || $groupmode == VISIBLEGROUPS)) {
list($gid, $uid) = explode('-', $groupanduser);
} else if ($wiki->wikimode == 'individual') {
$gid = 0;
$uid = $userid;
} else if ($groupmode == NOGROUPS) {
$gid = 0;
$uid = 0;
} else {
$gid = $currentgroup;
$uid = 0;
}
// Checking page instance
if ($page = wiki_get_page_by_title($subwiki->id, $title)) {
unset($title);
// Getting subwiki instance. If it does not exists, redirect to create page
if (!$subwiki = wiki_get_subwiki_by_group($wiki->id, $gid, $uid)) {
$params = array('wid' => $wiki->id, 'gid' => $gid, 'uid' => $uid, 'title' => $title);
$url = new moodle_url('/mod/wiki/create.php', $params);
redirect($url);
}
// Checking course instance
if (!$course = get_course_by_id($wiki->course)) {
print_error('coursemisconf');
// Checking is there is a page with this title. If it does not exists, redirect to first page
if (!$page = wiki_get_page_by_title($subwiki->id, $title)) {
$params = array('wid' => $wiki->id, 'gid' => $gid, 'uid' => $uid, 'title' => $wiki->firstpagetitle);
$url = new moodle_url('/mod/wiki/view.php', $params);
redirect($url);
}
// Checking course module instance
if (!$cm = get_coursemodule_from_instance("wiki", $wiki->id, $course->id)) {
print_error('invalidcoursemodule');
}
$subwiki = null;
$page = null;
/*
* Case 4:
*
* Error. No more options
*/
} else {
// /*
// * Case 3:
// *
// * A user switches group when is 'reading' a non-existent page.
// *
// * URL Params: wid -> wiki id
// * title -> page title
// * currentgroup -> group id
// *
// */
//} elseif ($wid && $title && $currentgroup) {
//
// // Checking wiki instance
// if (!$wiki = wiki_get_wiki($wid)) {
// print_error('incorrectwikiid', 'wiki');
// }
//
// // Checking subwiki instance
// // @TODO: Fix call to wiki_get_subwiki_by_group
// if (!$currentgroup = groups_get_activity_group($cm)){
// $currentgroup = 0;
// }
// if (!$subwiki = wiki_get_subwiki_by_group($wid, $currentgroup)) {
// print_error('incorrectsubwikiid', 'wiki');
// }
//
// // Checking page instance
// if ($page = wiki_get_page_by_title($subwiki->id, $title)) {
// unset($title);
// }
//
// // Checking course instance
// if (!$course = get_course_by_id($wiki->course)) {
// print_error('coursemisconf');
// }
//
// // Checking course module instance
// if (!$cm = get_coursemodule_from_instance("wiki", $wiki->id, $course->id)) {
// print_error('invalidcoursemodule');
// }
//
// $subwiki = null;
// $page = null;
//
// /*
// * Case 4:
// *
// * Error. No more options
// */
} else {
print_error('incorrectparameters');
}
require_course_login($course, true, $cm);
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
require_capability('mod/wiki:viewpage', $context);
add_to_log($course->id, 'wiki', 'view', 'view.php?id='.$cm->id, $wiki->id);
add_to_log($course->id, 'wiki', 'view', 'view.php?id=' . $cm->id, $wiki->id);
if (($edit != - 1) and $PAGE->user_allowed_editing()) {
$USER->editing = $edit;