Commit e1ba4c22 authored by Robert Lyon's avatar Robert Lyon
Browse files

Bug 1991604: Outcomes portfolio (4) - Adjustments to use the existing signoff...


Bug 1991604: Outcomes portfolio (4) - Adjustments to use the existing signoff switch for activity page

Instead of building a new switch, this patch
- allows the signoff switch to appear on the group -> activity page
- allows the group admin/tutor to have signoff privelege
- have the signoff switch to call new json file instead of normal
signoff json file
- allow group admins/tutors to be able to delete a chekpoint block
- the adding / saving of checkpoint comment returns to the edit pge if
set via edit page
- allow people to edit their checkpoint comment if within 10mins
- stop editing of *_support fields when page is signed off

Change-Id: I260dc4d0c24d7336d230710e8aaf7b87f3600e18
Signed-off-by: default avatarRobert Lyon <robertl@catalyst.net.nz>
parent ec97924c
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -26,7 +26,10 @@ function checkpointBlockInit() {
    configureAssessmentCancel();
    configureModalOpen();
    connectCheckpointBlocks();
    // for adding a new block on the page
    if (typeof dock.init === "function") {
        dock.init(jQuery(document));
    }
};

jQuery(window).on('pageupdated', {}, function () {
@@ -189,14 +192,12 @@ function addCheckpointFeedbackError(form, data) {
 * Connect checkpoint blocks to the dropdown achievement submit form
 */
function connectCheckpointBlocks() {
    console.log('connect')
    // Activity page checkpoint blocks achievement level interaction logic
    let achievement_forms = $('.block');
    let select_submit_pairs = [];
    let submit_btns = $(achievement_forms).find('.submit input[id^="achievement_form"]');
    let select_elems = $(achievement_forms).find('select');
    let num_of_checkpoints = submit_btns.length;
    console.log(num_of_checkpoints)

    // Collect up the block, submit button, and select for each checkpoint block
    for (let i = 0; i < num_of_checkpoints; i++) {
+3 −2
Original line number Diff line number Diff line
@@ -74,7 +74,8 @@ class PluginBlocktypeCheckpoint extends MaharaCoreBlocktype {
            pieform(ArtefactTypeCheckpointfeedback::delete_checkpoint_feedback_form(
                param_integer('feedback'),
                param_integer('view'),
                param_integer('block')
                param_integer('block'),
                $editing
            ));
        }
        $view = new View($instance->get('view'));
@@ -96,7 +97,7 @@ class PluginBlocktypeCheckpoint extends MaharaCoreBlocktype {
        }
        else {
            $feedback = ArtefactTypeCheckpointfeedback::get_checkpoint_feedback($options, $versioning, $exporter);
            $feedbackform = ArtefactTypeCheckpointfeedback::add_checkpoint_feedback_form($instance->get('id'), 0);
            $feedbackform = ArtefactTypeCheckpointfeedback::add_checkpoint_feedback_form($instance->get('id'), 0, $editing);
            $feedbackform = pieform($feedbackform);
            $smarty->assign('allowfeedback', $feedback->canedit && !$versioning);
            $smarty->assign('addcheckpointfeedbackform', $feedbackform);
+39 −0
Original line number Diff line number Diff line
<?php

/**
 * Fetch the checkpoint feedback comments
 *
 * @package    mahara
 * @subpackage artefact-checkpoint
 * @author     Catalyst IT Limited <mahara@catalyst.net.nz>
 * @license    https://www.gnu.org/licenses/gpl-3.0.html GNU GPL version 3 or later
 * @copyright  For copyright information on Mahara, please see the README file distributed with this software.
 *
 */

define('INTERNAL', 1);
define('JSON', 1);

require(dirname(dirname(dirname(__FILE__))) . '/init.php');
require_once(get_config('libroot') . 'view.php');
safe_require('artefact', 'checkpoint');
safe_require('blocktype', 'checkpoint');

$id = param_integer('id');
$blockid = param_integer('block');
$block = new BlockInstance($blockid);

// Is the block correct type
if ($block->get('blocktype') != 'checkpoint') {
    json_reply('local', get_string('wrongblocktype', 'view'));
}

$view = $block->get_view();
$viewid = $view->get('id');
// Is the block on a page we can see
if (!can_view_view($viewid)) {
    json_reply('local', get_string('noaccesstoview', 'view'));
}

$data = get_field('artefact', 'description', 'id', $id, 'artefacttype', 'checkpointfeedback');
json_reply(false, array('data' => $data));
+19 −14
Original line number Diff line number Diff line
@@ -207,8 +207,11 @@ class ArtefactTypeCheckpointfeedback extends ArtefactType {
        );
    }

    public function get_view_url($viewid, $showcomment = true, $full = true) {
    public function get_view_url($viewid, $showcomment = true, $full = true, $editing = false) {
        $url = 'view/view.php?id=' . $viewid;
        if ($editing) {
            $url = 'view/blocks.php?id=' . $viewid;
        }
        if ($showcomment) {
            $url .= '&showfeedback=' . $this->get('id');
        }
@@ -619,10 +622,8 @@ class ArtefactTypeCheckpointfeedback extends ArtefactType {
        $lastcomment = self::last_feedback($data->view);
        $editableafter = time() - 60 * get_config_plugin('artefact', 'comment', 'commenteditabletime');
        $admintutorids = $view->get('group') ? group_get_member_ids($view->get('group'), array('admin', 'tutor')) : [];
        foreach ($data->data as &$item) {
            $candelete = ($data->canedit
                && ($item->author == $USER->get('id')))
                || in_array($USER->get('id'), $admintutorids);
        foreach ($data->data as $key => &$item) {
            $candelete = in_array($USER->get('id'), $admintutorids);
            $item->ts = strtotime($item->ctime);
            $timelapse = format_timelapse($item->ts);
            $item->date = ($timelapse) ? $timelapse : format_date($item->ts, 'strftimedatetime');
@@ -640,7 +641,7 @@ class ArtefactTypeCheckpointfeedback extends ArtefactType {
            // Feedback authors can edit recent feedback if they're within editable timeframe.
            if (
                $data->canedit &&
                ($item->isauthor && !$is_export_preview && $item->ts > $editableafter
                ($item->isauthor && !$is_export_preview && $item->ts > $editableafter && $item->id == $lastcomment->id
                )
            ) {
                $item->canedit = 1;
@@ -656,7 +657,7 @@ class ArtefactTypeCheckpointfeedback extends ArtefactType {
                    ERROR_MULTIPLE
                );

                if (($candelete || ($item->isauthor && !$is_export_preview))
                if ($candelete && !$is_export_preview
                    && $submittedcheck->submittedstatus == View::UNSUBMITTED
                ) {
                    $item->deleteform = pieform(
@@ -668,7 +669,7 @@ class ArtefactTypeCheckpointfeedback extends ArtefactType {
                    $smarty->assign('id', $item->id);
                    $smarty->assign('block', $item->block);
                    $smarty->assign('title', $item->title);
                    // $item->editlink = $smarty->fetch('artefact:checkpoint:editlink.tpl'); //TODO: Doris
                    $item->editlink = $smarty->fetch('artefact:checkpoint:editlink.tpl');
                }
            }
            if ($exporter) {
@@ -765,8 +766,6 @@ class ArtefactTypeCheckpointfeedback extends ArtefactType {
            'jsform'          => true,
            'autofocus'       => false,
            'elements'        => array(),
            // 'successcallback'   => 'add_checkpoint_feedback_form_submit',
            // 'validatecallback'  => 'add_checkpoint_feedback_form_validate',
            'jssuccesscallback' => 'selectLevelSuccess',
            'jserrorcallback'   => 'selectLevelError',
        );
@@ -809,7 +808,7 @@ class ArtefactTypeCheckpointfeedback extends ArtefactType {
        return $form;
    }

    public static function add_checkpoint_feedback_form($blockid = 0, $id = 0) {
    public static function add_checkpoint_feedback_form($blockid = 0, $id = 0, $editing = false) {
        global $USER;
        $form = array(
            'name'            => 'add_checkpoint_feedback_form_' . $blockid,
@@ -836,6 +835,10 @@ class ArtefactTypeCheckpointfeedback extends ArtefactType {
            'type' => 'hidden',
            'value' => $blockid,
        );
        $form['elements']['editing'] = array(
            'type' => 'hidden',
            'value' => $editing,
        );
        $form['elements']['feedback'] = array(
            'type' => 'text',
            'defaultvalue' => $id,
@@ -860,7 +863,7 @@ class ArtefactTypeCheckpointfeedback extends ArtefactType {
        return $form;
    }

    public static function delete_checkpoint_feedback_form($id, $viewid, $blockid) {
    public static function delete_checkpoint_feedback_form($id, $viewid, $blockid, $editing = false) {
        global $THEME;
        return array(
            'name'     => 'delete_checkpoint_feedback_' . $id,
@@ -877,6 +880,7 @@ class ArtefactTypeCheckpointfeedback extends ArtefactType {
                'feedback' => array('type' => 'hidden', 'value' => $id),
                'view' => array('type' => 'hidden', 'value' => $viewid),
                'block' => array('type' => 'hidden', 'value' => $blockid),
                'editing' => array('type' => 'hidden', 'value' => $editing),
                'submit'  => array(
                    'type'  => 'button',
                    'usebuttontag' => true,
@@ -905,7 +909,7 @@ function delete_checkpoint_feedback_submit(Pieform $form, $values) {
    $view = $checkpoint_feedback->get_view();
    $viewid = $values['view'];
    $blockid = $checkpoint_feedback->get('block');
    $url = $view->get_url(false);
    $url = !empty($values['editing']) ? 'view/blocks.php?id=' . $viewid : $view->get_url(false);
    $goto = get_config('wwwroot') . $url;
    // If this page is being marked, make assessments un-deletable until released
    // unless it is the last assessment still with in the editable timeframe
@@ -1031,7 +1035,8 @@ function add_checkpoint_feedback_form_submit(Pieform $form, $values) {
        update_record('artefact', $updated, 'id');
    }

    $url = $checkpoint_feedback->get_view_url($view->get('id'), true, false);
    $url = $checkpoint_feedback->get_view_url($view->get('id'), true, false, $values['editing']);

    $goto = get_config('wwwroot') . $url;

    // If the checkpoint feedback is published we send a notification to page owner
+3 −3
Original line number Diff line number Diff line
@@ -573,11 +573,11 @@ class ArtefactTypePeerassessment extends ArtefactType {
    }

    public static function is_signed_off(View $view) {
        if (!$view->get('owner')) {
            return false;
        }
        if ($view->get('owner') || ($view->get('group') && $view->get('type') == 'activity')) {
            return (bool)get_field_sql("SELECT signoff FROM {view_signoff_verify} WHERE view = ? LIMIT 1", array($view->get('id')));
        }
        return false;
    }

    /*
     * Checks if the verify options is enabled for the page
Loading