public function testPushDashboardToUsers() { $super = Yii::app()->user->userModel; //Make and Get Five Users $users = UserTestHelper::generateBasicUsers(5); $this->assertEquals(5, count($users)); //Remove any one portlet from super's default dashboard $defaultDashboards = Dashboard::getDefaultDashboardsByUser($super); if (count($defaultDashboards) == 0) { $defaultDashboard = Dashboard::setDefaultDashboardForUser($super); } else { $defaultDashboard = $defaultDashboards[0]; } $defaultDashboardLayoutId = PushDashboardUtil::HOME_DASHBOARD . $defaultDashboard->layoutId; $defaultPortlets = Portlet::getByLayoutIdAndUserSortedById($defaultDashboardLayoutId, $super->id); if (empty($defaultPortlets)) { $metadata = HomeDashboardView::getDefaultMetadata(); $portletCollection = Portlet::makePortletsUsingMetadataSortedByColumnIdAndPosition($defaultDashboardLayoutId, $metadata, $super, null); $this->assertNotEmpty($portletCollection); Portlet::savePortlets($portletCollection); $defaultPortlets = Portlet::getByLayoutIdAndUserSortedById($defaultDashboardLayoutId, $super->id); } $this->assertTrue(count($defaultPortlets) > 0); foreach ($defaultPortlets as $portlet) { $portlet->delete(); break; } $defaultPortlets = Portlet::getByLayoutIdAndUserSortedById($defaultDashboardLayoutId, $super->id); $deafultPortletViews = array(); foreach ($defaultPortlets as $portlet) { $deafultPortletViews[] = $portlet->viewType; } //Push super's default dashboard to five users $userIds = array(); foreach ($users as $user) { $userIds[] = $user->id; } $groupsAndUsers = array(); $groupsAndUsers['groups'] = array(); $groupsAndUsers['users'] = $userIds; PushDashboardUtil::pushDashboardToUsers($defaultDashboard, $groupsAndUsers); //Validate and compare portlets of five user's dashboard with super's default dashboard foreach ($users as $user) { $userPortlets = Portlet::getByLayoutIdAndUserSortedById($defaultDashboardLayoutId, $user->id); $this->assertEquals(count($defaultPortlets), count($userPortlets)); foreach ($userPortlets as $portlet) { $this->assertTrue(in_array($portlet->viewType, $deafultPortletViews)); } } }
public static function getByLayoutIdAndUser($layoutId, $user) { assert('is_integer($layoutId) && $layoutId >= 1'); assert('$user instanceof User && $user->id > 0'); $sql = 'select dashboard.id id ' . 'from dashboard, ownedsecurableitem ' . 'where ownedsecurableitem.owner__user_id = ' . $user->id . ' and dashboard.ownedsecurableitem_id = ownedsecurableitem.id ' . ' and layoutid = ' . $layoutId . ' order by layoutId;'; $ids = R::getCol($sql); assert('count($ids) <= 1'); if (count($ids) == 0) { if ($layoutId == Dashboard::DEFAULT_USER_LAYOUT_ID) { return Dashboard::setDefaultDashboardForUser($user); } throw new NotFoundException(); } $bean = R::load(RedBeanModel::getTableName('Dashboard'), $ids[0]); assert('$bean === false || $bean instanceof RedBean_OODBBean'); if ($bean === false) { throw new NotFoundException(); } return self::makeModel($bean); }
/** * Returns default dashboard for user. * Creates and return default dashboard, if no dashboard exists for user * @param Dashboard $dashboard * @param User $user * @return Dashboard * @throws FailedToSaveModelException */ public static function resolveDefaultDashboardByUser(Dashboard $dashboard, User $user) { $userDefaultDashboards = Dashboard::getDefaultDashboardsByUser($user); if (count($userDefaultDashboards) == 0) { $userDashboard = Dashboard::setDefaultDashboardForUser($user); } else { $userDashboard = $userDefaultDashboards[0]; } $userDashboard->setTreatCurrentUserAsOwnerForPermissions(true); $userDashboard->name = $dashboard->name; $userDashboard->layoutType = $dashboard->layoutType; $saved = $userDashboard->save(); if (!$saved) { throw new FailedToSaveModelException(); } return $userDashboard; }