Skip to content

Commit

Permalink
Merge branch 'MDL-25660-workshop-calendar_21' of git://github.com/mud…
Browse files Browse the repository at this point in the history
…rd8mz/moodle into MOODLE_21_STABLE
  • Loading branch information
danpoltawski committed Apr 17, 2012
2 parents 8a2b5c4 + f58b7c2 commit d89ebcc
Show file tree
Hide file tree
Showing 4 changed files with 148 additions and 1 deletion.
37 changes: 37 additions & 0 deletions mod/workshop/db/upgrade.php
Expand Up @@ -319,5 +319,42 @@ function xmldb_workshop_upgrade($oldversion) {
upgrade_mod_savepoint(true, 2011061001, 'workshop'); upgrade_mod_savepoint(true, 2011061001, 'workshop');
} }


/**
* Remove all workshop calendar events
*/
if ($oldversion < 2011061002) {
require_once($CFG->dirroot . '/calendar/lib.php');
$events = $DB->get_records('event', array('modulename' => 'workshop'));
foreach ($events as $event) {
$event = calendar_event::load($event);
$event->delete();
}
upgrade_mod_savepoint(true, 2011061002, 'workshop');
}

/**
* Recreate all workshop calendar events
*/
if ($oldversion < 2011061003) {
require_once(dirname(dirname(__FILE__)) . '/lib.php');

$sql = "SELECT w.id, w.course, w.name, w.intro, w.introformat, w.submissionstart,
w.submissionend, w.assessmentstart, w.assessmentend,
cm.id AS cmid
FROM {workshop} w
JOIN {modules} m ON m.name = 'workshop'
JOIN {course_modules} cm ON (cm.module = m.id AND cm.course = w.course AND cm.instance = w.id)";

$rs = $DB->get_recordset_sql($sql);

foreach ($rs as $workshop) {
$cmid = $workshop->cmid;
unset($workshop->cmid);
workshop_calendar_update($workshop, $cmid);
}
$rs->close();
upgrade_mod_savepoint(true, 2011061003, 'workshop');
}

return true; return true;
} }
4 changes: 4 additions & 0 deletions mod/workshop/lang/en/workshop.php
Expand Up @@ -49,6 +49,7 @@
$string['assessmentbyyourself'] = 'Your assessment'; $string['assessmentbyyourself'] = 'Your assessment';
$string['assessmentdeleted'] = 'Assessment deallocated'; $string['assessmentdeleted'] = 'Assessment deallocated';
$string['assessmentend'] = 'Deadline for assessment'; $string['assessmentend'] = 'Deadline for assessment';
$string['assessmentendevent'] = '{$a} (assessment deadline)';
$string['assessmentenddatetime'] = 'Assessment deadline: {$a->daydatetime} ({$a->distanceday})'; $string['assessmentenddatetime'] = 'Assessment deadline: {$a->daydatetime} ({$a->distanceday})';
$string['assessmentform'] = 'Assessment form'; $string['assessmentform'] = 'Assessment form';
$string['assessmentofsubmission'] = '<a href="{$a->assessmenturl}">Assessment</a> of <a href="{$a->submissionurl}">{$a->submissiontitle}</a>'; $string['assessmentofsubmission'] = '<a href="{$a->assessmenturl}">Assessment</a> of <a href="{$a->submissionurl}">{$a->submissiontitle}</a>';
Expand All @@ -57,6 +58,7 @@
$string['assessmentreferenceneeded'] = 'You have to assess this example submission to provide a reference assessment. Click \'Continue\' button to assess the submission.'; $string['assessmentreferenceneeded'] = 'You have to assess this example submission to provide a reference assessment. Click \'Continue\' button to assess the submission.';
$string['assessmentsettings'] = 'Assessment settings'; $string['assessmentsettings'] = 'Assessment settings';
$string['assessmentstart'] = 'Open for assessment from'; $string['assessmentstart'] = 'Open for assessment from';
$string['assessmentstartevent'] = '{$a} (opens for assessment)';
$string['assessmentstartdatetime'] = 'Open for assessment from {$a->daydatetime} ({$a->distanceday})'; $string['assessmentstartdatetime'] = 'Open for assessment from {$a->daydatetime} ({$a->distanceday})';
$string['assessmentweight'] = 'Assessment weight'; $string['assessmentweight'] = 'Assessment weight';
$string['assignedassessments'] = 'Assigned submissions to assess'; $string['assignedassessments'] = 'Assigned submissions to assess';
Expand Down Expand Up @@ -206,12 +208,14 @@
$string['submissionattachment'] = 'Attachment'; $string['submissionattachment'] = 'Attachment';
$string['submissioncontent'] = 'Submission content'; $string['submissioncontent'] = 'Submission content';
$string['submissionend'] = 'Submissions deadline'; $string['submissionend'] = 'Submissions deadline';
$string['submissionendevent'] = '{$a} (submissions deadline)';
$string['submissionenddatetime'] = 'Submissions deadline: {$a->daydatetime} ({$a->distanceday})'; $string['submissionenddatetime'] = 'Submissions deadline: {$a->daydatetime} ({$a->distanceday})';
$string['submissiongrade'] = 'Grade for submission'; $string['submissiongrade'] = 'Grade for submission';
$string['submissiongrade_help'] = 'This setting specifies the maximum grade that may be obtained for submitted work.'; $string['submissiongrade_help'] = 'This setting specifies the maximum grade that may be obtained for submitted work.';
$string['submissiongradeof'] = 'Grade for submission (of {$a})'; $string['submissiongradeof'] = 'Grade for submission (of {$a})';
$string['submissionsettings'] = 'Submission settings'; $string['submissionsettings'] = 'Submission settings';
$string['submissionstart'] = 'Open for submissions from'; $string['submissionstart'] = 'Open for submissions from';
$string['submissionstartevent'] = '{$a} (opens for submissions)';
$string['submissionstartdatetime'] = 'Open for submissions from {$a->daydatetime} ({$a->distanceday})'; $string['submissionstartdatetime'] = 'Open for submissions from {$a->daydatetime} ({$a->distanceday})';
$string['submissiontitle'] = 'Title'; $string['submissiontitle'] = 'Title';
$string['subplugintype_workshopallocation'] = 'Submissions allocation method'; $string['subplugintype_workshopallocation'] = 'Submissions allocation method';
Expand Down
106 changes: 106 additions & 0 deletions mod/workshop/lib.php
Expand Up @@ -29,6 +29,8 @@


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


require_once($CFG->dirroot . '/calendar/lib.php');

//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Moodle core API // // Moodle core API //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -106,6 +108,9 @@ function workshop_add_instance(stdclass $workshop) {
workshop_grade_item_update($workshop); workshop_grade_item_update($workshop);
workshop_grade_item_category_update($workshop); workshop_grade_item_category_update($workshop);


// create calendar events
workshop_calendar_update($workshop, $workshop->coursemodule);

return $workshop->id; return $workshop->id;
} }


Expand Down Expand Up @@ -155,6 +160,9 @@ function workshop_update_instance(stdclass $workshop) {
workshop_grade_item_update($workshop); workshop_grade_item_update($workshop);
workshop_grade_item_category_update($workshop); workshop_grade_item_category_update($workshop);


// update calendar events
workshop_calendar_update($workshop, $workshop->coursemodule);

return true; return true;
} }


Expand Down Expand Up @@ -210,6 +218,13 @@ function workshop_delete_instance($id) {
call_user_func($classname.'::delete_instance', $workshop->id); call_user_func($classname.'::delete_instance', $workshop->id);
} }


// delete the calendar events
$events = $DB->get_records('event', array('modulename' => 'workshop', 'instance' => $workshop->id));
foreach ($events as $event) {
$event = calendar_event::load($event);
$event->delete();
}

// finally remove the workshop record itself // finally remove the workshop record itself
$DB->delete_records('workshop', array('id' => $workshop->id)); $DB->delete_records('workshop', array('id' => $workshop->id));


Expand Down Expand Up @@ -1386,3 +1401,94 @@ function workshop_page_type_list($pagetype, $parentcontext, $currentcontext) {
$module_pagetype = array('mod-workshop-*'=>get_string('page-mod-workshop-x', 'workshop')); $module_pagetype = array('mod-workshop-*'=>get_string('page-mod-workshop-x', 'workshop'));
return $module_pagetype; return $module_pagetype;
} }

////////////////////////////////////////////////////////////////////////////////
// Calendar API //
////////////////////////////////////////////////////////////////////////////////

/**
* Updates the calendar events associated to the given workshop
*
* @param stdClass $workshop the workshop instance record
* @param int $cmid course module id
*/
function workshop_calendar_update(stdClass $workshop, $cmid) {
global $DB;

// get the currently registered events so that we can re-use their ids
$currentevents = $DB->get_records('event', array('modulename' => 'workshop', 'instance' => $workshop->id));

// the common properties for all events
$base = new stdClass();
$base->description = format_module_intro('workshop', $workshop, $cmid, false);
$base->courseid = $workshop->course;
$base->groupid = 0;
$base->userid = 0;
$base->modulename = 'workshop';
$base->eventtype = 'pluginname';
$base->instance = $workshop->id;
$base->visible = instance_is_visible('workshop', $workshop);
$base->timeduration = 0;

if ($workshop->submissionstart) {
$event = clone($base);
$event->name = get_string('submissionstartevent', 'mod_workshop', $workshop->name);
$event->timestart = $workshop->submissionstart;
if ($reusedevent = array_shift($currentevents)) {
$event->id = $reusedevent->id;
} else {
// should not be set but just in case
unset($event->id);
}
// calendar_event::create will reuse a db record if the id field is set
calendar_event::create($event);
}

if ($workshop->submissionend) {
$event = clone($base);
$event->name = get_string('submissionendevent', 'mod_workshop', $workshop->name);
$event->timestart = $workshop->submissionend;
if ($reusedevent = array_shift($currentevents)) {
$event->id = $reusedevent->id;
} else {
// should not be set but just in case
unset($event->id);
}
// calendar_event::create will reuse a db record if the id field is set
calendar_event::create($event);
}

if ($workshop->assessmentstart) {
$event = clone($base);
$event->name = get_string('assessmentstartevent', 'mod_workshop', $workshop->name);
$event->timestart = $workshop->assessmentstart;
if ($reusedevent = array_shift($currentevents)) {
$event->id = $reusedevent->id;
} else {
// should not be set but just in case
unset($event->id);
}
// calendar_event::create will reuse a db record if the id field is set
calendar_event::create($event);
}

if ($workshop->assessmentend) {
$event = clone($base);
$event->name = get_string('assessmentendevent', 'mod_workshop', $workshop->name);
$event->timestart = $workshop->assessmentend;
if ($reusedevent = array_shift($currentevents)) {
$event->id = $reusedevent->id;
} else {
// should not be set but just in case
unset($event->id);
}
// calendar_event::create will reuse a db record if the id field is set
calendar_event::create($event);
}

// delete any leftover events
foreach ($currentevents as $oldevent) {
$oldevent = calendar_event::load($oldevent);
$oldevent->delete();
}
}
2 changes: 1 addition & 1 deletion mod/workshop/version.php
Expand Up @@ -29,6 +29,6 @@


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


$module->version = 2011061001; $module->version = 2011061003;
$module->requires = 2011020900; // Requires this Moodle version $module->requires = 2011020900; // Requires this Moodle version
//$module->cron = 60; //$module->cron = 60;

0 comments on commit d89ebcc

Please sign in to comment.