public function testResolvePortletsForCurrentUser() { $betty = User::getByUsername('betty'); $this->assertFalse(RightsUtil::canUserAccessModule('AccountsModule', $betty)); $this->assertFalse(RightsUtil::canUserAccessModule('ContactsModule', $betty)); $this->assertFalse(RightsUtil::canUserAccessModule('TasksModule', $betty)); Yii::app()->user->userModel = $betty; $portlet1 = new Portlet(); $portlet1->viewType = 'AccountsRelatedList'; $portlet2 = new Portlet(); $portlet2->viewType = 'ContactsRelatedList'; $portlet3 = new Portlet(); $portlet3->viewType = 'TasksMyList'; $portlets = array(); $portlets[0][0] = $portlet1; $portlets[0][1] = $portlet2; $portlets[0][2] = $portlet3; $portlets[1][0] = $portlet3; $portlets[1][1] = $portlet1; $portlets[1][2] = $portlet3; $this->assertEquals(2, count($portlets)); $resolvedPortlets = PortletsSecurityUtil::resolvePortletsForCurrentUser($portlets); $comparePortlets = array(); $comparePortlets[0][0] = $portlet3; $comparePortlets[1][0] = $portlet3; $comparePortlets[1][1] = $portlet3; $this->assertEquals(0, count($resolvedPortlets)); Yii::app()->user->userModel = User::getByUsername('super'); $resolvedPortlets = PortletsSecurityUtil::resolvePortletsForCurrentUser($portlets); $this->assertEquals($portlets, $resolvedPortlets); }
/** * @param string $uniqueLayoutId * @param array $metadata * @return array */ protected function getPortlets($uniqueLayoutId, $metadata) { assert('is_string($uniqueLayoutId)'); assert('is_array($metadata)'); $portlets = parent::getPortlets($uniqueLayoutId, $metadata); return PortletsSecurityUtil::resolvePortletsForCurrentUser($portlets); }
protected function renderContent() { $placedViewTypes = $this->getPlacedViewTypes(); $modules = Module::getModuleObjects(); foreach ($modules as $module) { if ($module->isEnabled()) { $p = $module->getParentModule(); $viewClassNames = $module::getViewClassNames(); foreach ($viewClassNames as $className) { $viewReflectionClass = new ReflectionClass($className); if (!$viewReflectionClass->isAbstract()) { $portletRules = PortletRulesFactory::createPortletRulesByView($className); if ($portletRules != null && $portletRules->allowOnDashboard()) { if ($portletRules->allowMultiplePlacementOnDashboard() && PortletsSecurityUtil::doesCurrentUserHavePermissionToAddPortlet($portletRules) === true || !$portletRules->allowMultiplePlacementOnDashboard() && !in_array($portletRules->getType(), $placedViewTypes) && PortletsSecurityUtil::doesCurrentUserHavePermissionToAddPortlet($portletRules) === true) { $metadata = $className::getMetadata(); $url = Yii::app()->createUrl($this->moduleId . '/defaultPortlet/add', array('uniqueLayoutId' => $this->uniqueLayoutId, 'dashboardId' => $this->dashboardId, 'portletType' => $portletRules->getType())); if (isset($metadata['perUser']['title'])) { $title = $metadata['perUser']['title']; } else { continue; } MetadataUtil::resolveEvaluateSubString($title); $sortablePortlets[$title] = array('url' => $url, 'title' => $title, 'portletRules' => $portletRules); } } } } } } return PortletUtil::renderAddPortletsContent($sortablePortlets); }
protected function renderContent() { $placedViewTypes = Portlet::getPlacedViewTypesByLayoutIdAndUser($this->uniqueLayoutId, Yii::app()->user->userModel->id); $modules = Module::getModuleObjects(); $sortablePortlets = array(); foreach ($modules as $module) { if ($module->isEnabled()) { $p = $module->getParentModule(); $viewClassNames = $module::getViewClassNames(); foreach ($viewClassNames as $className) { $viewReflectionClass = new ReflectionClass($className); if (!$viewReflectionClass->isAbstract()) { $portletRules = PortletRulesFactory::createPortletRulesByView($className); if ($viewReflectionClass->implementsInterface('RelatedPortletViewInterface')) { if ($this->resolveLayoutIdInAllowedOnPortletViewClassNames($className) && $className::allowMultiplePlacement() == false && !in_array($portletRules->getType(), $placedViewTypes) && PortletsSecurityUtil::doesCurrentUserHavePermissionToAddPortlet($portletRules) === true) { $metadata = $className::getMetadata(); $url = Yii::app()->createUrl($this->moduleId . '/defaultPortlet/add', array('uniqueLayoutId' => $this->uniqueLayoutId, 'modelId' => $this->modelId, 'portletType' => $portletRules->getType())); $title = $metadata['perUser']['title']; MetadataUtil::resolveEvaluateSubString($title); $sortablePortlets[$title] = array('url' => $url, 'title' => $title, 'portletRules' => $portletRules); } } } } } } if (empty($sortablePortlets)) { $messageView = new NoPortletsToPlaceView(); return $messageView->render(); } //Sort by title ksort($sortablePortlets); return PortletUtil::renderAddPortletsContent($sortablePortlets); }
protected function renderContent() { $placedViewTypes = Portlet::getPlacedViewTypesByLayoutIdAndUser($this->uniqueLayoutId, Yii::app()->user->userModel->id); $content = '<ul class="available-portlets">'; $modules = Module::getModuleObjects(); foreach ($modules as $module) { if ($module->isEnabled()) { $p = $module->getParentModule(); $viewClassNames = $module::getViewClassNames(); foreach ($viewClassNames as $className) { $viewReflectionClass = new ReflectionClass($className); if (!$viewReflectionClass->isAbstract()) { $portletRules = PortletRulesFactory::createPortletRulesByView($className); if ($portletRules != null && $portletRules->allowOnDashboard()) { if ($portletRules->allowMultiplePlacementOnDashboard() && PortletsSecurityUtil::doesCurrentUserHavePermissionToAddPortlet($portletRules) === true || !$portletRules->allowMultiplePlacementOnDashboard() && !in_array($portletRules->getType(), $placedViewTypes) && PortletsSecurityUtil::doesCurrentUserHavePermissionToAddPortlet($portletRules) === true) { $metadata = $className::getMetadata(); $url = Yii::app()->createUrl($this->moduleId . '/defaultPortlet/add', array('uniqueLayoutId' => $this->uniqueLayoutId, 'dashboardId' => $this->dashboardId, 'portletType' => $portletRules->getType())); $onClick = 'window.location.href = "' . $url . '"'; $content .= '<li>'; $title = $metadata['perUser']['title']; MetadataUtil::resolveEvaluateSubString($title); $label = '<span>\\</span>' . $title; $content .= ZurmoHtml::link(Zurmo::t('HomeModule', $label), null, array('onclick' => $onClick)); $content .= '</li>'; } } } } } } $content .= '</ul>'; return $content; }
/** * Override to allow for making a default set of portlets * via metadata optional. * */ protected function getPortlets($uniqueLayoutId, $metadata) { assert('is_string($uniqueLayoutId)'); assert('is_array($metadata)'); $portlets = Portlet::getByLayoutIdAndUserSortedByColumnIdAndPosition($uniqueLayoutId, Yii::app()->user->userModel->id, $this->params); if (empty($portlets) && $this->isDefaultDashboard) { $portlets = Portlet::makePortletsUsingMetadataSortedByColumnIdAndPosition($uniqueLayoutId, $metadata, Yii::app()->user->userModel, $this->params); Portlet::savePortlets($portlets); } return PortletsSecurityUtil::resolvePortletsForCurrentUser($portlets); }
protected function renderContent() { $placedViewTypes = Portlet::getPlacedViewTypesByLayoutIdAndUser($this->uniqueLayoutId, Yii::app()->user->userModel->id); $content = '<ul class="available-portlets">'; $modules = Module::getModuleObjects(); $sortablePortlets = array(); foreach ($modules as $module) { if ($module->isEnabled()) { $p = $module->getParentModule(); $viewClassNames = $module::getViewClassNames(); foreach ($viewClassNames as $className) { $viewReflectionClass = new ReflectionClass($className); if (!$viewReflectionClass->isAbstract()) { $portletRules = PortletRulesFactory::createPortletRulesByView($className); if ($viewReflectionClass->implementsInterface('RelatedPortletViewInterface')) { if ($this->resolveLayoutIdInAllowedOnPortletViewClassNames($className) && $className::allowMultiplePlacement() == false && !in_array($portletRules->getType(), $placedViewTypes) && PortletsSecurityUtil::doesCurrentUserHavePermissionToAddPortlet($portletRules) === true) { $metadata = $className::getMetadata(); $url = Yii::app()->createUrl($this->moduleId . '/defaultPortlet/add', array('uniqueLayoutId' => $this->uniqueLayoutId, 'modelId' => $this->modelId, 'portletType' => $portletRules->getType())); $title = $metadata['perUser']['title']; MetadataUtil::resolveEvaluateSubString($title); $sortablePortlets[$title] = $url; } } } } } } if (empty($sortablePortlets)) { $messageView = new NoPortletsToPlaceView(); return $messageView->render(); } //Sort by title ksort($sortablePortlets); foreach ($sortablePortlets as $title => $url) { $onClick = 'window.location.href = "' . $url . '"'; $content .= '<li>'; $label = '<span>\\</span>' . $title; $content .= ZurmoHtml::link(Zurmo::t('HomeModule', $label), null, array('onclick' => $onClick)); $content .= '</li>'; } $content .= '</ul>'; return $content; }
public function testDoesCurrentUserHavePermissionToAddPortlet() { $betty = User::getByUsername('betty'); Yii::app()->user->userModel = $betty; $portletRules = new RelatedListPortletRules('ProductsForAccountRelatedListView'); $this->assertFalse(PortletsSecurityUtil::doesCurrentUserHavePermissionToAddPortlet($portletRules)); $betty->setRight('ProductsModule', ProductsModule::RIGHT_ACCESS_PRODUCTS); $saved = $betty->save(); $this->assertTrue($saved); $this->assertTrue(PortletsSecurityUtil::doesCurrentUserHavePermissionToAddPortlet($portletRules)); }