protected function getPlacedViewTypes()
 {
     $portlets = Portlet::getByLayoutIdAndUserSortedById($this->uniqueLayoutId, Yii::app()->user->userModel->id);
     $placedViewTypes = array();
     foreach ($portlets as $portlet) {
         $placedViewTypes[] = $portlet->viewType;
     }
     return $placedViewTypes;
 }
 /**
  * Save layout changes including:
  *  collapse/show
  *  position change
  *  removed portlets
  *
  */
 public function actionSaveLayout()
 {
     $portlets = Portlet::getByLayoutIdAndUserSortedById($_POST['portletLayoutConfiguration']['uniqueLayoutId'], Yii::app()->user->userModel->id);
     $portletsStillOnLayout = array();
     if (!empty($_POST['portletLayoutConfiguration']['portlets'])) {
         foreach ($_POST['portletLayoutConfiguration']['portlets'] as $key => $portletPostData) {
             $idParts = explode("_", $portletPostData['id']);
             $portlets[$idParts[1]]->column = $portletPostData['column'] + 1;
             $portlets[$idParts[1]]->position = $portletPostData['position'] + 1;
             $portlets[$idParts[1]]->collapsed = BooleanUtil::boolVal($portletPostData['collapsed']);
             $portlets[$idParts[1]]->save();
             $portletsStillOnLayout[$idParts[1]] = $idParts[1];
         }
     }
     foreach ($portlets as $portletId => $portlet) {
         if (!isset($portletsStillOnLayout[$portletId])) {
             $portlet->delete();
         }
     }
 }
 public static function pushDetailsAndRelationsViewPortlets(User $user, $model)
 {
     $layoutIdPrefix = get_class($model);
     $layoutId = $layoutIdPrefix . self::DETAILS_AND_RELATIONS_VIEW;
     $userLayoutPortlets = Portlet::getByLayoutIdAndUserSortedById($layoutId, $user->id);
     $pushedLayoutPortlets = Portlet::getByLayoutIdAndUserSortedById($layoutId, Yii::app()->user->userModel->id);
     foreach ($userLayoutPortlets as $portlet) {
         $portlet->delete();
         unset($portlet);
     }
     foreach ($pushedLayoutPortlets as $pushedLayoutPortlet) {
         $portlet = new Portlet();
         $portlet->column = $pushedLayoutPortlet->column;
         $portlet->position = $pushedLayoutPortlet->position;
         $portlet->layoutId = $layoutId;
         $portlet->collapsed = $pushedLayoutPortlet->collapsed;
         $portlet->viewType = $pushedLayoutPortlet->viewType;
         $portlet->serializedViewData = $pushedLayoutPortlet->serializedViewData;
         $portlet->user = $user;
         $portlet->save();
     }
 }
Exemple #4
0
 public function testShiftPositionsBasedOnColumnReduction()
 {
     $user = User::getByUserName('billy');
     for ($i = 1; $i <= 3; $i++) {
         $portlet = new Portlet();
         $portlet->column = 1;
         $portlet->position = $i;
         $portlet->layoutId = 'shiftTest';
         $portlet->collapsed = true;
         $portlet->viewType = 'RssReader';
         $portlet->user = $user;
         $this->assertTrue($portlet->save());
     }
     for ($i = 1; $i <= 5; $i++) {
         $portlet = new Portlet();
         $portlet->column = 2;
         $portlet->position = $i;
         $portlet->layoutId = 'shiftTest';
         $portlet->collapsed = true;
         $portlet->viewType = 'RssReader';
         $portlet->user = $user;
         $this->assertTrue($portlet->save());
     }
     for ($i = 1; $i <= 4; $i++) {
         $portlet = new Portlet();
         $portlet->column = 3;
         $portlet->position = $i;
         $portlet->layoutId = 'shiftTest';
         $portlet->collapsed = true;
         $portlet->viewType = 'RssReader';
         $portlet->user = $user;
         $this->assertTrue($portlet->save());
     }
     $this->assertEquals(count(Portlet::getByLayoutIdAndUserSortedById('shiftTest', $user->id)), 12);
     $portletCollection = Portlet::getByLayoutIdAndUserSortedByColumnIdAndPosition('shiftTest', $user->id, array());
     Portlet::shiftPositionsBasedOnColumnReduction($portletCollection, 2);
     $portletCollection = Portlet::getByLayoutIdAndUserSortedByColumnIdAndPosition('shiftTest', $user->id, array());
     $this->assertEquals(count($portletCollection), 2);
     $this->assertEquals(count($portletCollection[1]), 7);
     Portlet::shiftPositionsBasedOnColumnReduction($portletCollection, 1);
     $portletCollection = Portlet::getByLayoutIdAndUserSortedByColumnIdAndPosition('shiftTest', $user->id, array());
     $this->assertEquals(count($portletCollection), 1);
     $this->assertEquals(count($portletCollection[1]), 12);
 }
 /**
  * testGetRowsByUserId
  */
 public function testDeleteDashboardAndRelatedPortlets()
 {
     Yii::app()->user->userModel = User::getByUsername('billy');
     $dashboardCount = Dashboard::getCount();
     $this->assertTrue($dashboardCount > 0);
     $user = User::getByUserName('billy');
     Yii::app()->user->userModel = $user;
     $dashboard = new Dashboard();
     $dashboard->name = "Dashboard TESTING";
     $dashboard->layoutId = 3;
     $dashboard->owner = $user;
     $dashboard->layoutType = '100';
     $dashboard->isDefault = false;
     $this->assertTrue($dashboard->save());
     $this->assertEquals(Portlet::getCount(), 0);
     $this->assertEquals(Dashboard::getCount(), $dashboardCount + 1);
     for ($i = 1; $i <= 3; $i++) {
         $portlet = new Portlet();
         $portlet->column = 1;
         $portlet->position = 1 + $i;
         $portlet->layoutId = 'TEST' . $dashboard->layoutId;
         $portlet->collapsed = false;
         $portlet->viewType = 'TasksMyList';
         $portlet->user = $user;
         $this->assertTrue($portlet->save());
     }
     $this->assertEquals(Portlet::getCount(), 3);
     $portlets = Portlet::getByLayoutIdAndUserSortedById('TEST' . $dashboard->layoutId, $user->id);
     foreach ($portlets as $portlet) {
         $portlet->delete();
     }
     $dashboard->delete();
     $this->assertEquals(Portlet::getCount(), 0);
     $this->assertEquals(Dashboard::getCount(), $dashboardCount);
 }
 /**
  * Removes dashboard and related portlets
  *
  */
 public function actionDeleteDashboard()
 {
     $id = intval($_GET['dashboardId']);
     $dashboard = Dashboard::getById($id);
     ControllerSecurityUtil::resolveAccessCanCurrentUserDeleteModel($dashboard);
     if ($dashboard->isDefault) {
         //todo: make a specific exception or view for this situation.
         throw new NotSupportedException();
     }
     $portlets = Portlet::getByLayoutIdAndUserSortedById('HomeDashboard' . $id, Yii::app()->user->userModel->id);
     foreach ($portlets as $portlet) {
         $portlet->delete();
         unset($portlet);
     }
     $dashboard->delete();
     unset($dashboard);
     $this->redirect(array('default/index'));
 }
 public function testPushLayoutToUsers()
 {
     $super = Yii::app()->user->userModel;
     //Make and Get Five Users
     $users = UserTestHelper::generateBasicUsers(5);
     $this->assertEquals(5, count($users));
     //Remove first portlet from Super's ContactDetailsAndRelationsView
     $defaultLayoutId = 'Contact' . PushDashboardUtil::DETAILS_AND_RELATIONS_VIEW;
     $defaultPortlets = Portlet::getByLayoutIdAndUserSortedById($defaultLayoutId, $super->id);
     if (empty($defaultPortlets)) {
         $metadata = ContactDetailsAndRelationsView::getDefaultMetadata();
         $portletCollection = Portlet::makePortletsUsingMetadataSortedByColumnIdAndPosition($defaultLayoutId, $metadata, $super, null);
         $this->assertNotEmpty($portletCollection);
         Portlet::savePortlets($portletCollection);
         $defaultPortlets = Portlet::getByLayoutIdAndUserSortedById($defaultLayoutId, $super->id);
     }
     $this->assertTrue(count($defaultPortlets) > 0);
     foreach ($defaultPortlets as $portlet) {
         $portlet->delete();
         break;
     }
     $defaultPortlets = Portlet::getByLayoutIdAndUserSortedById($defaultLayoutId, $super->id);
     $deafultPortletViews = array();
     foreach ($defaultPortlets as $portlet) {
         $deafultPortletViews[] = $portlet->viewType;
     }
     //Push super's default ContactDetailsAndRelationsView to five users
     $userIds = array();
     foreach ($users as $user) {
         $userIds[] = $user->id;
     }
     $groupsAndUsers = array();
     $groupsAndUsers['groups'] = array();
     $groupsAndUsers['users'] = $userIds;
     PushDashboardUtil::pushLayoutToUsers(new Contact(false), $groupsAndUsers);
     //Validate portlets of five user's ContactDetailsAndRelationsView with super's ContactDetailsAndRelationsView
     foreach ($users as $user) {
         $userPortlets = Portlet::getByLayoutIdAndUserSortedById($defaultLayoutId, $user->id);
         $this->assertEquals(count($defaultPortlets), count($userPortlets));
         foreach ($userPortlets as $portlet) {
             $this->assertTrue(in_array($portlet->viewType, $deafultPortletViews));
         }
     }
 }