Skip to content

Commit

Permalink
Merge branch 'MDL-49470_master-fix-number-events' of git://github.com…
Browse files Browse the repository at this point in the history
…/dmonllao/moodle
  • Loading branch information
danpoltawski committed Mar 25, 2015
2 parents 7db6d31 + b7bfbfe commit e961016
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 58 deletions.
40 changes: 1 addition & 39 deletions mod/lesson/lesson.php
Expand Up @@ -126,45 +126,7 @@
case 'moveit':
$after = (int)required_param('after', PARAM_INT); // target page

$pages = $lesson->load_all_pages();

if (!array_key_exists($pageid, $pages) || ($after!=0 && !array_key_exists($after, $pages))) {
print_error('cannotfindpages', 'lesson', "$CFG->wwwroot/mod/lesson/edit.php?id=$cm->id");
}
$pagetomove = clone($pages[$pageid]);
unset($pages[$pageid]);

$pageids = array();
if ($after === 0) {
$pageids['p0'] = $pageid;
}
foreach ($pages as $page) {
$pageids[] = $page->id;
if ($page->id == $after) {
$pageids[] = $pageid;
}
}

$pageidsref = $pageids;
reset($pageidsref);
$prev = 0;
$next = next($pageidsref);
foreach ($pageids as $pid) {
if ($pid === $pageid) {
$page = $pagetomove;
} else {
$page = $pages[$pid];
}
if ($page->prevpageid != $prev || $page->nextpageid != $next) {
$page->move($next, $prev);
}
$prev = $page->id;
$next = next($pageidsref);
if (!$next) {
$next = 0;
}
}

$lesson->resort_pages($pageid, $after);
redirect("$CFG->wwwroot/mod/lesson/edit.php?id=$cm->id");
break;
default:
Expand Down
92 changes: 76 additions & 16 deletions mod/lesson/locallib.php
Expand Up @@ -1645,6 +1645,82 @@ public function is_sub_page_of_type($pageid, array $types, array $ends) {
$pageid = $pages[$pageid]->prevpageid;
}
}

/**
* Move a page resorting all other pages.
*
* @param int $pageid
* @param int $after
* @return void
*/
public function resort_pages($pageid, $after) {
global $CFG;

$cm = get_coursemodule_from_instance('lesson', $this->properties->id, $this->properties->course);
$context = context_module::instance($cm->id);

$pages = $this->load_all_pages();

if (!array_key_exists($pageid, $pages) || ($after!=0 && !array_key_exists($after, $pages))) {
print_error('cannotfindpages', 'lesson', "$CFG->wwwroot/mod/lesson/edit.php?id=$cm->id");
}

$pagetomove = clone($pages[$pageid]);
unset($pages[$pageid]);

$pageids = array();
if ($after === 0) {
$pageids['p0'] = $pageid;
}
foreach ($pages as $page) {
$pageids[] = $page->id;
if ($page->id == $after) {
$pageids[] = $pageid;
}
}

$pageidsref = $pageids;
reset($pageidsref);
$prev = 0;
$next = next($pageidsref);
foreach ($pageids as $pid) {
if ($pid === $pageid) {
$page = $pagetomove;
} else {
$page = $pages[$pid];
}
if ($page->prevpageid != $prev || $page->nextpageid != $next) {
$page->move($next, $prev);

if ($pid === $pageid) {
// We will trigger an event.
$pageupdated = array('next' => $next, 'prev' => $prev);
}
}

$prev = $page->id;
$next = next($pageidsref);
if (!$next) {
$next = 0;
}
}

// Trigger an event: page moved.
if (!empty($pageupdated)) {
$eventparams = array(
'context' => $context,
'objectid' => $pageid,
'other' => array(
'pagetype' => $page->get_typestring(),
'prevpageid' => $pageupdated['prev'],
'nextpageid' => $pageupdated['next']
)
);
$event = \mod_lesson\event\page_moved::create($eventparams);
$event->trigger();
}

}
}


Expand Down Expand Up @@ -2022,22 +2098,6 @@ final public function move($nextpageid=null, $prevpageid=null) {
$obj->prevpageid = $prevpageid;
$obj->nextpageid = $nextpageid;
$DB->update_record('lesson_pages', $obj);

$cm = get_coursemodule_from_instance('lesson', $this->lesson->id, $this->lesson->course);
$context = context_module::instance($cm->id);

// Trigger an event: page moved.
$eventparams = array(
'context' => $context,
'objectid' => $this->properties->id,
'other' => array(
'pagetype' => $this->get_typestring(),
'prevpageid' => $prevpageid,
'nextpageid' => $nextpageid
)
);
$event = \mod_lesson\event\page_moved::create($eventparams);
$event->trigger();
}

/**
Expand Down
8 changes: 5 additions & 3 deletions mod/lesson/tests/events_test.php
Expand Up @@ -84,6 +84,7 @@ public function test_page_created() {
public function test_page_moved() {

// Set up a generator to create content.
// paga3 is the first one and page1 the last one.
$generator = $this->getDataGenerator()->get_plugin_generator('mod_lesson');
$pagerecord1 = $generator->create_content($this->lesson);
$page1 = $this->lesson->load_page($pagerecord1->id);
Expand All @@ -93,16 +94,17 @@ public function test_page_moved() {
$page3 = $this->lesson->load_page($pagerecord3->id);
// Trigger and capture the event.
$sink = $this->redirectEvents();
$page3->move($pagerecord2->id, $pagerecord1->id);
$this->lesson->resort_pages($page3->id, $pagerecord2->id);
// Get our event event.
$events = $sink->get_events();
$event = reset($events);

$this->assertCount(1, $events);
// Check that the event data is valid.
$this->assertInstanceOf('\mod_lesson\event\page_moved', $event);
$this->assertEquals($page3->id, $event->objectid);
$this->assertEquals($pagerecord2->id, $event->other['nextpageid']);
$this->assertEquals($pagerecord1->id, $event->other['prevpageid']);
$this->assertEquals($pagerecord1->id, $event->other['nextpageid']);
$this->assertEquals($pagerecord2->id, $event->other['prevpageid']);
$this->assertEventContextNotUsed($event);
$this->assertDebuggingNotCalled();
}
Expand Down

0 comments on commit e961016

Please sign in to comment.