Commit e56fcd8e authored by Robert Lyon's avatar Robert Lyon Committed by Kristina Hoeppner
Browse files

Bug 1996475: Submitted portfolios appear as column on reports



in the Admin → Reports section

Fixed for:
- page activity report
- page access report
- SmartEvidence summary report

'Submission status' column added and all three statuses are listed
for portfolios so it's clear which ones are currently submitted,
released, or not submitted.

Change-Id: I1ce7f11f053742b6d32c279e19401aafe3d74ac7
Signed-off-by: default avatarRobert Lyon <robertl@catalyst.net.nz>
parent 94c6d0cb
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
<!-- @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. -->
<h1>Submitted status</h1>
<p>The submission status of the page can be one of the following:.</p>
<ul>
<li><strong>Not submitted:</strong> Page has not been submitted or has been fully released from submission.</li>
<li><strong>Submitted:</strong> Page has been submitted to a group or external system.</li>
<li><strong>Archiving:</strong> Page has been released and waiting for archiving.</li>
<li><strong>Released:</strong> Page has been released from submission.</li>
</ul>
+3 −0
Original line number Diff line number Diff line
@@ -203,6 +203,7 @@ $string['reportdescsmartevidence'] = '<ul>
<li>Email address</>
<li>Title of the portfolio</li>
<li>Number of pages in the portfolio</li>
<li>Submission status</li>
<li>Access list, i.e. who has permission to view the portfolio</li>
<li>The sum of each status for the SmartEvidence assessment across the portfolio, no matter the individual standards</li>
</ul><p>Listed are portfolios that were created during the selected time period. Their current access permissions are shown.</p>';
@@ -212,6 +213,7 @@ $string['reportdescaccesslist'] = '<ul>
<li>Portfolio owner</li>
<li>Title of the portfolio</li>
<li>Number of pages in the portfolio</li>
<li>Submission status</li>
<li>Access list, i.e. who has permission to view the portfolio</li>
</ul><p>Listed are portfolios that were created during the selected time period. Their current access permissions are shown.</p>';

@@ -330,6 +332,7 @@ $string['reportdescpageactivity'] = '<ul>
<li>Number of blocks included in the page</li>
<li>Number of visits to the page</li>
<li>Number of comments on the page</li>
<li>Submission status</p>
</ul><p>Displayed are pages that were modified during the reporting time period.</p>';
$string['allothers'] = 'All others';

+4 −0
Original line number Diff line number Diff line
@@ -112,6 +112,7 @@ $string['collectionsubmittedtohost'] = 'This collection has been submitted for a
$string['collectionsubmittedtohoston'] = 'This collection was submitted on %s.';
$string['submittedpendingrelease'] = 'Pending release after archiving.';
$string['submittedpendingreleasefailed'] = 'Release failed to archive.<br>Go to <a href="%s">Export queue</a> to re-queue.';
$string['submittedstatus'] = 'Submission status';
$string['nobodycanseethisview2'] = 'Only you can see this page.';
$string['noviews2'] = 'No portfolios';
$string['youhavenoviews2'] = 'You don\'t have any portfolios.';
@@ -277,7 +278,10 @@ $string['viewinformationsaved'] = 'Page information saved successfully';
$string['canteditdontown'] = 'You cannot edit this page because you do not own it.';
$string['canteditsubmitted'] = 'You cannot edit this page because it has been submitted for assessment to "%s". You will have to wait until a tutor releases the page.';
$string['canteditsubmission'] = 'You cannot edit this page while it is a submission.';
$string['notsubmitted'] = 'Not submitted';
$string['Submitted'] = 'Submitted';
$string['archiving'] = 'Archiving';
$string['released'] = 'Released';
$string['submittedforassessment'] = 'Submitted for assessment';
$string['blocknotinview'] = 'The block with ID "%d" is not in the page.';

+77 −7
Original line number Diff line number Diff line
@@ -3533,6 +3533,12 @@ function pageactivity_statistics_headers($extra, $urllink) {
              'link' => format_goto($urllink . '&sort=comments', $extra, array('sort'), 'comments'),
              'helplink' => get_help_icon('core', 'reports', 'pageactivity', 'comments')
        ),
        array('id' => 'submittedstatus', 'required' => false,
              'name' => get_string('submittedstatus', 'view'),
              'class' => format_class($extra, 'submittedstatus'),
              'link' => format_goto($urllink . '&sort=submittedstatus', $extra, array('sort'), 'submittedstatus'),
              'helplink' => get_help_icon('core', 'reports', 'pageactivity', 'submittedstatus')
        ),
    );
}

@@ -3641,12 +3647,15 @@ function view_stats_table($limit, $offset, $extra) {
        case "visited":
            $orderby = " v.atime " . (!empty($extra['sortdesc']) ? 'ASC' : 'DESC') . ", v.title, v.id";
            break;
        case "submittedstatus":
            $orderby = " v.submittedstatus " . (!empty($extra['sortdesc']) ? 'ASC' : 'DESC') . ", v.title, v.id";
            break;
        case "visits":
        default:
            $orderby = " v.visits " . (!empty($extra['sortdesc']) ? 'ASC' : 'DESC') . ", v.title, v.id";
    }

    $sql = "SELECT v.id, v.title, v.owner, v.group, v.institution, c.name,
    $sql = "SELECT v.id, v.title, v.owner, v.group, v.institution, c.name, v.submittedstatus, v.submissionoriginal,
            CASE
                WHEN v.owner IS NOT NULL
                THEN (SELECT CONCAT(firstname, ' ', lastname) FROM {usr} WHERE id = v.owner)
@@ -3692,13 +3701,14 @@ function view_stats_table($limit, $offset, $extra) {
            $v->collectiontitle = $v->collection->get('name');
        }
        $v->canbeviewed = $v->id ? can_view_view($v->id) : false;
        $v->submittedstatus = add_submitted_label($v->submittedstatus, (bool)$v->submissionoriginal);
    }

    $daterange = array_map(function ($obj) { return $obj->ctime; }, $viewdata);
    $result['settings']['start'] = ($start) ? $start : min($daterange);
    if (!empty($extra['csvdownload'])) {
        $csvfields = array('displaytitle', 'fullurl', 'collectiontitle','ownername', 'ownerurl',
                           'ctime', 'mtime', 'atime', 'blocks', 'visits', 'comments');
                           'ctime', 'mtime', 'atime', 'blocks', 'visits', 'comments', 'submittedstatus');
        $USER->set_download_file(generate_csv($viewdata, $csvfields), 'viewstatistics.csv', 'text/csv', true);
    }
    $result['csv'] = true;
@@ -3716,6 +3726,33 @@ function view_stats_table($limit, $offset, $extra) {
    return $result;
}

/**
 * Find the correct submission label based on the submittedstatus value and
 * if the connection to original still exists
 *
 * @param integer $submittedstatus
 * @param boolean $original
 * @return string|false
 */
function add_submitted_label($submittedstatus, $original=false) {
    if (is_null($submittedstatus)) {
        return false;
    }
    if ($original && $submittedstatus == 0) {
        $submittedstatus = 3;
    }
    $options = array(0 => get_string('notsubmitted', 'view'),
                     1 => get_string('Submitted', 'view'),
                     2 => get_string('archiving', 'view'),
                     3 => get_string('released', 'view')
               );

    if (isset($options[$submittedstatus])) {
        return $options[$submittedstatus];
    }
    return $options[0];
}

function view_type_graph($type = null) {
    // Draw a pie graph of views broken down by view type.
    $viewtypes = get_records_sql_array('
@@ -3904,12 +3941,15 @@ function institution_view_stats_table($limit, $offset, &$institutiondata, $extra
        case "visited":
            $orderby = " v.atime " . (!empty($extra['sortdesc']) ? 'ASC' : 'DESC') . ", v.title, v.id";
            break;
        case "submittedstatus":
            $orderby = " v.submittedstatus " . (!empty($extra['sortdesc']) ? 'ASC' : 'DESC') . ", v.title, v.id";
            break;
        case "visits":
        default:
            $orderby = " v.visits " . (!empty($extra['sortdesc']) ? 'ASC' : 'DESC') . ", v.title, v.id";
    }

    $sql = "SELECT v.id, v.title, v.owner, v.group, v.institution,
    $sql = "SELECT v.id, v.title, v.owner, v.group, v.institution, v.submittedstatus, v.submissionoriginal,
            CASE
                WHEN v.owner IS NOT NULL
                THEN (SELECT CONCAT(firstname, ' ', lastname) FROM {usr} WHERE id = v.owner)
@@ -3956,13 +3996,14 @@ function institution_view_stats_table($limit, $offset, &$institutiondata, $extra
        $v->name = ($v->collection) ? $v->collection->get('name') : null;
        $v->collectiontitle = $v->name;
        $v->canbeviewed = $v->id ? can_view_view($v->id) : false;
        $v->submittedstatus = add_submitted_label($v->submittedstatus, (bool)$v->submissionoriginal);
    }

    $daterange = array_map(function ($obj) { return $obj->ctime; }, $viewdata);
    $result['settings']['start'] = ($start) ? $start : min($daterange);
    if (!empty($extra['csvdownload'])) {
        $csvfields = array('displaytitle', 'fullurl', 'collectiontitle', 'ownername', 'ownerurl',
                           'ctime', 'mtime', 'atime', 'blocks', 'visits', 'comments');
                           'ctime', 'mtime', 'atime', 'blocks', 'visits', 'comments', 'submittedstatus');
        $USER->set_download_file(generate_csv($viewdata, $csvfields), $institutiondata['name'] . 'viewstatistics.csv', 'text/csv', true);
    }
    $result['csv'] = true;
@@ -4815,6 +4856,12 @@ function smartevidence_stats_headers($limit, $offset, $extra, $institution, $url
            'link' => format_goto($urllink . '&sort=pagecount', $extra, array('sort'), 'pagecount'),
            'helplink' => get_help_icon('core', 'reports', 'smartevidence', 'pagecount'),
        ),
        array('id' => 'submittedstatus',
              'name' => get_string('submittedstatus', 'view'),
              'class' => format_class($extra, 'submittedstatus'),
              'link' => format_goto($urllink . '&sort=submittedstatus', $extra, array('sort'), 'submittedstatus'),
              'helplink' => get_help_icon('core', 'reports', 'pageactivity', 'submittedstatus')
        ),
        array(
            'id' => 'accessrules',
            'required' => false,
@@ -4932,6 +4979,7 @@ function smartevidence_stats_table($limit, $offset, $extra, $institution, $urlli
        $item->hasaccessrules = !empty($item->access);
        $item->canbeviewed = $item->viewid ? can_view_view($item->viewid) : false;
        $item->pending = is_view_suspended($item->viewid);
        $item->submittedstatus = add_submitted_label($item->submittedstatus, (bool)$item->submissionoriginal);
        // Extra detail from the collection.
        $collection = new Collection($item->collectionid);
        $item->collectionurl = $collection->get_url();
@@ -4988,6 +5036,7 @@ function smartevidence_stats_table($limit, $offset, $extra, $institution, $urlli
            'hasaccessrules',
            'userurl',
            'collectionurl',
            'submittedstatus'
        ];
        foreach ($framework_statuses as $key => $state) {
            $csvfields[] = $state['statisticsid'];
@@ -5043,7 +5092,9 @@ function smartevidence_stats_query($limit, $offset, $extra, $institution) {
            c.id AS collectionid,
            (SELECT COUNT(*) FROM {collection_view} WHERE collection = c.id) AS views,
            c.name AS title,
            c.ctime AS vctime
            c.ctime AS vctime,
            c.submittedstatus,
            c.submissionoriginal
        FROM {usr} u JOIN {collection} c ON c.owner = u.id
        JOIN {collection_view} cv ON cv.collection = c.id
        WHERE cv.displayorder = 0
@@ -5088,6 +5139,9 @@ function smartevidence_stats_query($limit, $offset, $extra, $institution) {
        case "collection":
            $orderby = " title " . (!empty($extra['sortdesc']) ? 'DESC' : 'ASC') . ", displayname";
            break;
        case "submittedstatus":
            $orderby = " c.submittedstatus " . (!empty($extra['sortdesc']) ? 'ASC' : 'DESC') . ", title, viewid";
            break;
        case 'displayname':
        case 'username':
            // Order by sort type.
@@ -5108,6 +5162,8 @@ function smartevidence_stats_query($limit, $offset, $extra, $institution) {
        collectionid,
        views,
        title,
        submittedstatus,
        submissionoriginal,
        vctime
        " . $fromsql . $wheresql . "
        ORDER BY " . $orderby;
@@ -5143,6 +5199,12 @@ function accesslist_statistics_headers($extra, $urllink) {
              'link' => format_goto($urllink . '&sort=numviews', $extra, array('sort'), 'numviews'),
              'helplink' => get_help_icon('core', 'reports', 'accesslist', 'numviews')
        ),
        array('id' => 'submittedstatus', 'required' => false,
              'name' => get_string('submittedstatus', 'view'),
              'class' => format_class($extra, 'submittedstatus'),
              'link' => format_goto($urllink . '&sort=submittedstatus', $extra, array('sort'), 'submittedstatus'),
              'helplink' => get_help_icon('core', 'reports', 'pageactivity', 'submittedstatus')
        ),
        array(
              'id' => 'accessrules', 'required' => true,
              'name' => get_string('accesslist', 'view'),
@@ -5181,6 +5243,7 @@ function accesslist_stats_table($limit, $offset, $extra, $institution, $urllink)

    $fromsql = " FROM (
        SELECT u.id AS userid, u.deleted AS udeleted, CONCAT(u.firstname, ' ', u.lastname) AS displayname, cv.view AS viewid, c.id AS collectionid,
            c.submittedstatus AS submittedstatus, c.submissionoriginal AS submissionoriginal,
            (SELECT COUNT(*) FROM {collection_view} WHERE collection = c.id) AS views,
            c.name AS title, c.ctime AS vctime
        FROM {usr} u JOIN {collection} c ON c.owner = u.id
@@ -5188,12 +5251,15 @@ function accesslist_stats_table($limit, $offset, $extra, $institution, $urllink)
        WHERE cv.displayorder = 0
        UNION
        SELECT u.id AS userid, u.deleted AS udeleted, CONCAT(u.firstname, ' ', u.lastname) AS displayname, v.id AS viewid, NULL AS collectionid,
            CASE WHEN v.type != 'profile' THEN v.submittedstatus ELSE NULL END AS submittedstatus,
            CASE WHEN v.type != 'profile' THEN v.submissionoriginal ELSE NULL END AS submissionoriginal,
            1 AS views, v.title, v.ctime AS vctime
        FROM {usr} u JOIN {view} v ON v.owner = u.id
        LEFT JOIN {collection_view} cv ON cv.view = v.id
        WHERE cv.collection IS NULL AND v.type !='dashboard'
        UNION
        SELECT u.id AS userid, u.deleted AS udeleted, CONCAT(u.firstname, ' ', u.lastname) AS displayname, NULL AS viewid, NULL AS collectionid,
             NULL AS submittedstatus, NULL AS submissionoriginal,
            0 AS views, NULL as title, u.ctime AS vctime
        FROM {usr} u LEFT JOIN {view} v ON v.owner = u.id
        WHERE v.id IS NULL
@@ -5247,11 +5313,14 @@ function accesslist_stats_table($limit, $offset, $extra, $institution, $urllink)
        case "views":
            $orderby = " title " . (!empty($extra['sortdesc']) ? 'DESC' : 'ASC') . ", displayname";
            break;
        case "submittedstatus":
            $orderby = " submittedstatus " . (!empty($extra['sortdesc']) ? 'ASC' : 'DESC') . ", title, viewid";
            break;
        case "owner":
        default:
            $orderby = " displayname " . (!empty($extra['sortdesc']) ? 'DESC' : 'ASC') . ", title, viewid";
    }
    $sql = "SELECT userid, displayname, viewid, collectionid, views, title, vctime
    $sql = "SELECT userid, displayname, viewid, collectionid, submittedstatus, submissionoriginal, views, title, vctime
            " . $fromsql . $wheresql . "
            ORDER BY " . $orderby;
    if (empty($extra['csvdownload'])) {
@@ -5276,10 +5345,11 @@ function accesslist_stats_table($limit, $offset, $extra, $institution, $urllink)
        $item->hasaccessrules = !empty($item->access);
        $item->canbeviewed = $item->viewid ? can_view_view($item->viewid) : false;
        $item->pending = is_view_suspended($item->viewid);
        $item->submittedstatus = add_submitted_label($item->submittedstatus, (bool)$item->submissionoriginal);
    }

    if (!empty($extra['csvdownload'])) {
        $csvfields = array('displayname', 'userurl', 'title', 'views', 'hasaccessrules');
        $csvfields = array('displayname', 'userurl', 'title', 'views', 'hasaccessrules', 'submittedstatus');
        $USER->set_download_file(generate_csv($data, $csvfields), $institution . 'accessstatistics.csv', 'text/csv', true);
    }
    $result['csv'] = true;
+1 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
        </td>
    {/if}
    {if $columns.numviews}<td>{$item->views}</td>{/if}
    {if $columns.submittedstatus}<td class="center">{$item->submittedstatus}</td>{/if}
    {if $columns.accessrules}<td>{include file="admin/users/accesslistitem.tpl" item=$item}</td>{/if}
  </tr>
{/foreach}
Loading