/** * Update group and membership info in underlying 'course-' group (group type 4) * * Method is called anytime after a course is saved * * @param $course - course object */ public function onAfterStoreCourse($course) { // Get a new group object $group = new \Hubzero\User\Group(); // If the course doesn't have a group id set, then we need to create a new group if (!$course->get('group_id')) { // Set some group info $group->set('cn', 'course-' . $course->cn); $group->create(); $group->set('type', 4); // group type 4 = course // Set the new group gidNumber as the group_id in the course and update $course->set('group_id', $group->get('gidNumber')); $course->update(); } else { $group->read($course->get('group_id')); } // Set the group description (in case it's been changed) $group->set('description', $course->get('description')); // Get all of the course members that are not yet group members (i.e. they need to be added to the group) $add = array_diff($course->get('members'), $group->get('members')); foreach ($add as $a) { $group->add('members', $a); } // Get all of the group members that are not members of the course (i.e. they need to be removed from the group) $remove = array_diff($group->get('members'), $course->get('members')); foreach ($remove as $r) { $group->remove('members', $r); } // Finally, update the group $group->update(); }
/** * Erases all project information (to be used for test projects only) * * @return void */ public function eraseTask() { $id = Request::getVar('id', 0); $permanent = 1; // Initiate extended database class $obj = new Tables\Project($this->database); if (!$id or !$obj->loadProject($id)) { App::redirect(Route::url('index.php?option=' . $this->_option, false), Lang::txt('COM_PROJECTS_NOTICE_ID_NOT_FOUND'), 'error'); return; } // Get project group $group_prefix = $this->config->get('group_prefix', 'pr-'); $prGroup = $group_prefix . $obj->alias; // Store project info $alias = $obj->alias; $identifier = $alias; // Delete project $obj->delete(); // Erase all owners $objO = new Tables\Owner($this->database); $objO->removeOwners($id, '', 0, $permanent, '', $all = 1); // Erase owner group $group = new \Hubzero\User\Group(); $group->read($prGroup); if ($group) { $group->delete(); } // Erase all comments $objC = new Tables\Comment($this->database); $objC->deleteProjectComments($id, $permanent); // Erase all activities $objA = new Tables\Activity($this->database); $objA->deleteActivities($id, $permanent); // Erase all todos $objTD = new Tables\Todo($this->database); $objTD->deleteTodos($id, '', $permanent); // Erase all blog entries $objB = new Tables\Blog($this->database); $objB->deletePosts($id, $permanent); // Erase all notes if (file_exists(PATH_CORE . DS . 'components' . DS . 'com_wiki' . DS . 'models' . DS . 'page.php')) { include_once PATH_CORE . DS . 'components' . DS . 'com_wiki' . DS . 'models' . DS . 'page.php'; // Get all notes $this->database->setQuery("SELECT DISTINCT p.id FROM `#__wiki_pages` AS p\n\t\t\t\tWHERE p.scope_id=" . $this->database->quote($id) . " AND p.scope=" . $this->database->quote('project')); $notes = $this->database->loadObjectList(); if ($notes) { foreach ($notes as $note) { $page = \Components\Wiki\Models\Page::oneOrFail($note->id); // Finally, delete the page itself $page->destroy(); } } } // Erase all files, remove files repository if ($alias) { // Delete base dir for .git repos $dir = $alias; $prefix = $this->config->get('offroot', 0) ? '' : PATH_CORE; $repodir = DS . trim($this->config->get('webpath'), DS); $path = $prefix . $repodir . DS . $dir; if (is_dir($path)) { Filesystem::deleteDirectory($path); } // Delete images/preview directories $webdir = DS . trim($this->config->get('imagepath', '/site/projects'), DS); $webpath = PATH_APP . $webdir . DS . $dir; if (is_dir($webpath)) { Filesystem::deleteDirectory($webpath); } } // Redirect App::redirect(Route::url('index.php?option=' . $this->_option, false), Lang::txt('COM_PROJECTS_PROJECT') . ' #' . $id . ' (' . $alias . ') ' . Lang::txt('COM_PROJECTS_PROJECT_ERASED')); }
<tr> <td colspan="9"><?php // Initiate paging echo $this->pagination($this->total, $this->filters['start'], $this->filters['limit']); ?> </td> </tr> </tfoot> <tbody> <?php $database = App::get('db'); $k = 0; for ($i = 0, $n = count($this->rows); $i < $n; $i++) { $row =& $this->rows[$i]; $group = new \Hubzero\User\Group(); $group->read($row->gidNumber); switch ($row->type) { case '0': $type = Lang::txt('COM_GROUPS_TYPE_SYSTEM'); break; case '1': $type = Lang::txt('COM_GROUPS_TYPE_HUB'); break; case '2': $type = Lang::txt('COM_GROUPS_TYPE_PROJECT'); break; case '3': $type = Lang::txt('COM_GROUPS_TYPE_SUPER'); break; case '4': $type = Lang::txt('COM_GROUPS_TYPE_COURSE');
/** * Save a group * * @param string $toolid Tool ID * @param string $devgroup Group name * @param array $members List of members * @param boolean $exist Group exists? * @return boolean True if no errors */ public function saveGroup($toolid = NULL, $devgroup, $members, $exist) { if (!$toolid or !$devgroup) { return false; } $members = \Components\Tools\Helpers\Utils::transform($members, 'uidNumber'); $group = new \Hubzero\User\Group(); if (\Hubzero\User\Group::exists($devgroup)) { $group->read($devgroup); $existing_members = \Components\Tools\Helpers\Utils::transform(Tool::getToolDevelopers($toolid), 'uidNumber'); $group->set('members', $existing_members); $group->set('managers', $existing_managers); } else { $group->create(); $group->set('type', 2); $group->set('published', 1); $group->set('discoverability', 0); $group->set('description', 'Dev group for tool ' . $toolid); $group->set('cn', $devgroup); $group->set('members', $existing_members); $group->set('managers', $existing_managers); } $group->update(); if (!$exist) { $this->save($devgroup, $toolid, '1'); } return true; }