/** * Create a collection of pages * @param array $record * @throws SystemException if creating failed * @return int new collection id */ public function create_collection($record) { // Validation switch ($record['ownertype']) { case 'institution': if (empty($record['ownername'])) { $record['institution'] = 'mahara'; break; } if ($institutionid = $this->get_institution_id($record['ownername'])) { $record['institution'] = $record['ownername']; } else { throw new SystemException("The institution '" . $record['ownername'] . "' does not exist."); } break; case 'group': if ($groupid = $this->get_group_id($record['ownername'])) { $record['group'] = $groupid; } else { throw new SystemException("The group '" . $record['ownername'] . "' does not exist."); } break; case 'user': default: if ($ownerid = get_field('usr', 'id', 'username', $record['ownername'])) { $record['owner'] = $ownerid; } else { throw new SystemException("The user '" . $record['ownername'] . "' does not exist."); } break; } // Check if the given pages exist and belong to the collection's owner $addviews = array(); if (!empty($record['pages'])) { $record['pages'] = trim($record['pages']); $viewtitles = !empty($record['pages']) ? explode(',', $record['pages']) : false; if (!empty($viewtitles)) { foreach ($viewtitles as $viewtitle) { if (!empty($viewtitle) && !($view = get_record_sql(' SELECT v.id FROM {view} v INNER JOIN {usr} u ON u.id = v.owner WHERE v.title = ? AND u.username = ?', array(trim($viewtitle), $record['ownername'])))) { throw new SystemException("The page '" . $viewtitle . "' does not exist or not belong to the user '" . $record['ownername'] . "'."); } $addviews['view_' . $view->id] = true; } } } // Create a new collection require_once 'collection.php'; $data = new StdClass(); $data->name = $record['title']; $data->description = $record['description']; if (!empty($record['group'])) { $data->group = $record['group']; } else { if (!empty($record['institution'])) { $data->institution = $record['institution']; } else { if (!empty($record['owner'])) { $data->owner = $record['owner']; } } } $collection = new Collection(0, $data); $collection->commit(); // Add views to the collection if (!empty($addviews)) { $collection->add_views($addviews); } }