Patch for "master" branch: https://reviews.mahara.org/11744

-- 
You received this bug notification because you are a member of Mahara
Contributors, which is subscribed to Mahara.
Matching subscriptions: mahara-contributors
https://bugs.launchpad.net/bugs/1898650

Title:
  Duplicate Collection View Displayorder

Status in Mahara:
  Fix Released

Bug description:
  Mahara: 19.10.04  ( 2019093018 )
  OS: Linux 16.04 (PHP 7.0)
  DB: Postgres
  Browser: FF / Chrome

  
  In certain situations, the users are able to create a collection where the 
displayorder of the pages are duplicated. i.e. 2 pages with displayorder = 0 in 
the collection_view table.

  I have no idea how this situation came about. I only saw it in one of
  our production sites.

  For 1 collection with 37 pages, there were:

  * 2 pages with displayorder = 0
  * 2 pages with displayorder = 1

  The remaining pages were ordered correctly starting from 2 onwards.

  The result was the error:

  'A nonrecoverable error occurred. This probably means you have
  encountered a bug in the system'

  When trying to go to the Pages and Collections screen.

  The offending subquery which returned multiple records for a column is
  in lib/view.php::get_myviews_data() line 3804:

          $collselect = '
              UNION
              SELECT (SELECT view FROM {collection_view} cvid WHERE 
cvid.collection = c.id AND displayorder = 0) as id,
              null AS vid, c.name as title, c.name AS vtitle, c.description, 
null as type, c.ctime as vctime, c.mtime as vmtime, c.mtime as vatime,
              c.owner, c.group, c.institution, null as locked, null as 
ownerformat, null as urlid, null AS vvisits,
                     (SELECT COUNT(*) FROM {collection_view} cv WHERE 
cv.collection = c.id) AS numviews, c.id AS collid';

  
  As a side note, we really should not be calling subqueries for a column. This 
has huge performance issues since that subquery will be run for every row.

  I also note that there is another subquery to retrieve 'numviews'.
  Again, another performance hit.

  
  To eliminate the performance hit, the following should be changed:

          $collselect = '
              UNION
              SELECT cvid.view as id,
              null AS vid, c.name as title, c.name AS vtitle, c.description, 
null as type, c.ctime as vctime, c.mtime as vmtime, c.mtime as vatime,
              c.owner, c.group, c.institution, null as locked, null as 
ownerformat, null as urlid, null AS vvisits,
              numviews.numviews AS numviews, c.id AS collid';


          $collfrom = '
              FROM {view} v
              LEFT OUTER JOIN {collection_view} cv ON cv.view = v.id
              LEFT OUTER JOIN {collection} c ON cv.collection = c.id
              INNER join {collection_view} cvid on cvid.collection = c.id AND 
cvid.displayorder = 0
              INNER JOIN (SELECT COUNT(*) as numviews, numcv.collection 
                      FROM {collection_view} numcv
                      INNER JOIN {collection} numc ON numcv.collection = numc.id
                      GROUP BY numcv.collection) as numviews on 
numviews.collection = cv.collection';

  
  and under 'mostcomments':

  $collgroupby = ' GROUP BY cvid.view, numviews.numviews, c.id';

To manage notifications about this bug go to:
https://bugs.launchpad.net/mahara/+bug/1898650/+subscriptions

_______________________________________________
Mailing list: https://launchpad.net/~mahara-contributors
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~mahara-contributors
More help   : https://help.launchpad.net/ListHelp

Reply via email to